From 8c483312ef09ea81b2cbd7f7e067564f2ff50fc2 Mon Sep 17 00:00:00 2001 From: Lim Min Kuan Date: Fri, 6 Mar 2026 16:32:18 +0800 Subject: [PATCH 1/2] Fix KSP maven artifacts never being pinned ksp_maven was being computed and stored in WorkspaceDependencies but never reaching the pinning, dependency resolution, or Bazel rule generation steps due to three bugs: Bug 1 - ArtifactPinner skipped ksp_maven entirely: shouldRunPinning() and pinArtifacts() only iterated over variantDeps, so ksp_maven was never checked for staleness and ksp_maven_pin.sh was never generated. Bug 2 - DependencyResolutionService missing KSP from maven store: populateMavenStore() only iterated variantDeps, so getMavenDependency() would fail to resolve KSP artifacts during Bazel script generation. Bug 3 - Dangling Bazel target references from dropped KSP processors: RootBazelFileBuilder silently dropped processors with no SymbolProcessorProvider service entry while collectKspPluginDeps still referenced them, producing unresolvable Bazel targets. To fix these, introduce aggregatedRepos in WorkspaceDependencies to hold repo-keyed dependencies (e.g. ksp_maven) that bypass the variant reduction pipeline, alongside the existing variantDeps (renamed from result, with @SerialName to preserve JSON backward compatibility). All consumers are updated to handle both maps accordingly. --- .../grab/grazel/gradle/GradleProjectInfo.kt | 2 +- .../ComputeWorkspaceDependencies.kt | 10 +++---- .../gradle/dependencies/Dependencies.kt | 2 ++ .../DependencyResolutionService.kt | 24 ++++++++++++++- .../model/ResolveDependenciesResult.kt | 16 ++++++++-- .../migrate/dependencies/ArtificatPinner.kt | 30 ++++++++++++------- .../MavenInstallArtifactsCalculator.kt | 28 ++++++++--------- .../migrate/internal/RootBazelFileBuilder.kt | 16 ++++++++-- .../DefaultDependenciesDataSourceTest.kt | 4 +-- .../DefaultDependencyResolutionServiceTest.kt | 4 +-- .../DefaultAndroidLibraryDataExtractorTest.kt | 2 +- .../dependencies/DefaultArtifactPinnerTest.kt | 4 +-- .../MavenInstallArtifactsCalculatorTest.kt | 2 +- 13 files changed, 100 insertions(+), 44 deletions(-) diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/GradleProjectInfo.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/GradleProjectInfo.kt index 4e62f778..a70d5a00 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/GradleProjectInfo.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/GradleProjectInfo.kt @@ -70,7 +70,7 @@ internal class DefaultGradleProjectInfo( override val hasDagger: Boolean by lazy { workspaceDependencies - .result + .variantDeps .values .parallelStream() .flatMap { it.stream() } diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/ComputeWorkspaceDependencies.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/ComputeWorkspaceDependencies.kt index b535b68e..19e89156 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/ComputeWorkspaceDependencies.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/ComputeWorkspaceDependencies.kt @@ -152,8 +152,8 @@ internal class ComputeWorkspaceDependencies { ) ).toMap() - // Aggregate KSP deps across ALL variants into single bucket - val kspClassPath = compileDependenciesJsons + // Aggregate KSP deps across ALL variants into single bucket, deduplicated by max version + val kspDeps: List = compileDependenciesJsons .parallelStream() .map(::fromJson) .flatMap { it.dependencies.getOrDefault(KSP.name, emptySet()).stream() } @@ -162,7 +162,7 @@ internal class ComputeWorkspaceDependencies { ResolvedDependency::shortId, maxVersionReducer() ) - ) + ).values.sortedBy(ResolvedDependency::id) // Clear maps to allow GC defaultFlatClasspath.clear() @@ -171,8 +171,8 @@ internal class ComputeWorkspaceDependencies { defaultClasspath.clear() classPaths.clear() return WorkspaceDependencies( - result = reducedFinalClasspath, - kspResult = kspClassPath, + variantDeps = reducedFinalClasspath, + aggregatedRepos = if (kspDeps.isNotEmpty()) mapOf("ksp_maven" to kspDeps) else emptyMap(), transitiveClasspath = transitiveClasspath ) } diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/Dependencies.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/Dependencies.kt index 079e5d7d..4d60c257 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/Dependencies.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/Dependencies.kt @@ -327,11 +327,13 @@ internal class DefaultDependenciesDataSource @Inject constructor( project: Project, variantKey: VariantGraphKey ): List { + val validProcessorShortIds = dependencyResolutionService.get().getValidKspProcessorShortIds() val grazelVariant: Variant<*> = findGrazelVariantByKey(project, variantKey) return grazelVariant.kspConfiguration .asSequence() .flatMap { config -> config.allDependencies.filterIsInstance() } .distinctBy { it.shortId } + .filter { dep -> "${dep.module.group}:${dep.module.name}" in validProcessorShortIds } .map { dep -> // Create a minimal KspProcessor just for target name generation val processor = KspProcessor( diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/DependencyResolutionService.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/DependencyResolutionService.kt index 92e9f4ab..2d42194d 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/DependencyResolutionService.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/DependencyResolutionService.kt @@ -63,6 +63,13 @@ internal interface DependencyResolutionService : BuildService + /** + * Returns shortIds of KSP processors that have a valid [kt_ksp_plugin] target generated + * (i.e. whose processorClass was successfully extracted from the processor JAR). + * Processors absent from this set should not generate Bazel target references. + */ + fun getValidKspProcessorShortIds(): Set + fun init(workspaceDependenciesJson: File): WorkspaceDependencies companion object { @@ -80,6 +87,15 @@ internal abstract class DefaultDependencyResolutionService : DependencyResolutio private val mavenStoreLock = Mutex() private val transitiveDepsStoreLock = Mutex() + override fun getValidKspProcessorShortIds(): Set = + workspaceDependencies + ?.aggregatedRepos + ?.get("ksp_maven") + ?.filter { it.processorClass != null } + ?.map { it.shortId } + ?.toSet() + ?: emptySet() + override fun getMavenDependency( variants: Set, group: String, @@ -116,12 +132,18 @@ internal abstract class DefaultDependencyResolutionService : DependencyResolutio mavenStoreLock.withLock { if (mavenInstallStore == null) { mavenInstallStore = DefaultMavenInstallStore().apply { - workspaceDependencies.result.forEach { (variantName, dependencies) -> + workspaceDependencies.variantDeps.forEach { (variantName, dependencies) -> dependencies.forEach { dependency -> val (group, name, _) = dependency.id.split(":") set(variantName, group, name) } } + workspaceDependencies.aggregatedRepos.forEach { (repoName, dependencies) -> + dependencies.forEach { dependency -> + val (group, name, _) = dependency.id.split(":") + set(repoName, group, name) + } + } } } } diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/model/ResolveDependenciesResult.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/model/ResolveDependenciesResult.kt index d80393fb..630e0c86 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/model/ResolveDependenciesResult.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/model/ResolveDependenciesResult.kt @@ -17,6 +17,7 @@ package com.grab.grazel.gradle.dependencies.model import com.grab.grazel.bazel.starlark.BazelDependency +import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import org.gradle.api.artifacts.result.ResolvedComponentResult import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.Versioned @@ -124,8 +125,19 @@ internal data class OverrideTarget( @Serializable internal data class WorkspaceDependencies( - val result: Map>, - val kspResult: Map = emptyMap(), + /** + * Compile/runtime dependencies grouped by Gradle variant name (e.g. "default", "gpsPax"). + * Each entry maps 1:1 to a `maven_install` repository via [toMavenRepoName]. + * Keys are variant names, not repo names. + */ + @SerialName("result") + val variantDeps: Map>, + /** + * Dependencies aggregated across all variants into a single repo, keyed directly by + * maven repo name (e.g. "ksp_maven"). Unlike [variantDeps], these do not go through + * the variant deduplication/reduction pipeline. + */ + val aggregatedRepos: Map> = emptyMap(), val transitiveClasspath: Map> = emptyMap() ) diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/dependencies/ArtificatPinner.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/dependencies/ArtificatPinner.kt index f6e3020e..e0bb76cd 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/dependencies/ArtificatPinner.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/dependencies/ArtificatPinner.kt @@ -20,6 +20,7 @@ import com.grab.grazel.GrazelExtension import com.grab.grazel.bazel.exec.bazelCommand import com.grab.grazel.bazel.starlark.BazelDependency.MavenDependency import com.grab.grazel.di.GradleServices +import com.grab.grazel.gradle.dependencies.model.ResolvedDependency import com.grab.grazel.gradle.dependencies.model.WorkspaceDependencies import com.grab.grazel.util.NoOpProgressLogger import com.grab.grazel.util.WORKSPACE @@ -138,15 +139,11 @@ constructor( return true } else { failWhenOutOfDate(workspaceFile, true) - return workspaceDependencies.result.any { (repo, deps) -> - // Build any dependency with nobuild and check it fails due to maven_install.json - // being out of date + + fun checkRepoOutOfDate(mavenRepo: String, deps: List): Boolean { val dep = deps.first() val (group, name) = dep.shortId.split(":") - val mavenRepo = repo.toMavenRepoName() - progress.progress("Checking $mavenRepo's pin status") - val target = MavenDependency( repo = mavenRepo, group = group, @@ -167,8 +164,16 @@ constructor( ignoreExit = true, errorOutputStream = outputStream, ) - outputStream.isOutOfDate - }.also { + return outputStream.isOutOfDate + } + + return ( + workspaceDependencies.variantDeps.any { (variantName, deps) -> + checkRepoOutOfDate(variantName.toMavenRepoName(), deps) + } || workspaceDependencies.aggregatedRepos.any { (repoName, deps) -> + checkRepoOutOfDate(repoName, deps) + } + ).also { // Revert the changes to the workspace file failWhenOutOfDate(workspaceFile, false) progress.completed() @@ -207,8 +212,13 @@ constructor( if (shouldRun) { logger.quiet("Repinning all artifacts".ansiCyan) - val pinScripts = workspaceDependencies.result.mapValues { (repo, _) -> - val mavenRepoName = repo.toMavenRepoName() + val allRepos: Map> = buildMap { + workspaceDependencies.variantDeps.forEach { (variantName, deps) -> + put(variantName.toMavenRepoName(), deps) + } + putAll(workspaceDependencies.aggregatedRepos) + } + val pinScripts = allRepos.mapValues { (mavenRepoName, _) -> val scriptPath = layout .buildDirectory .file("grazel/maven/${mavenRepoName}_pin.sh").apply { diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/dependencies/MavenInstallArtifactsCalculator.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/dependencies/MavenInstallArtifactsCalculator.kt index 67806461..97d5b585 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/dependencies/MavenInstallArtifactsCalculator.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/dependencies/MavenInstallArtifactsCalculator.kt @@ -70,7 +70,7 @@ constructor( externalArtifacts: Set, externalRepositories: Set, ): Set { - val result = workspaceDependencies.result + val result = workspaceDependencies.variantDeps .mapNotNullTo(TreeSet(compareBy(MavenInstallData::name))) { (variantName, artifacts) -> val mavenInstallName = variantName.toMavenRepoName() val allArtifacts = artifacts + grazelExtension @@ -124,24 +124,23 @@ constructor( ) } - // Generate ksp_maven from aggregated KSP deps - if (workspaceDependencies.kspResult.isNotEmpty()) { - val kspArtifacts = workspaceDependencies.kspResult.values.toList() - val kspMavenInstallArtifacts = kspArtifacts + // Generate maven_install entries for aggregated repos (e.g. ksp_maven) + workspaceDependencies.aggregatedRepos.forEach { (repoName, artifacts) -> + val mavenInstallArtifacts = artifacts .mapTo(TreeSet(compareBy(MavenInstallArtifact::id)), ::toMavenInstallArtifact) + if (mavenInstallArtifacts.isEmpty()) return@forEach - val kspRepositories = calculateRepositoriesIncludingTransitives(kspArtifacts) - - val kspMavenInstallJson = layout + val repositories = calculateRepositoriesIncludingTransitives(artifacts) + val mavenInstallJson = layout .projectDirectory - .file("ksp_maven_install.json").asFile + .file("${repoName}_install.json").asFile result.add( MavenInstallData( - name = "ksp_maven", - artifacts = kspMavenInstallArtifacts, + name = repoName, + artifacts = mavenInstallArtifacts, externalArtifacts = emptySet(), - repositories = kspRepositories, + repositories = repositories, externalRepositories = emptySet(), jetifierConfig = JetifierConfig(isEnabled = false, artifacts = emptySet()), failOnMissingChecksum = false, @@ -150,8 +149,9 @@ constructor( resolveTimeout = mavenInstallExtension.resolveTimeout, artifactPinning = mavenInstallExtension.artifactPinning.enabled.get(), versionConflictPolicy = mavenInstallExtension.versionConflictPolicy, - mavenInstallJson = kspMavenInstallJson.name, - isMavenInstallJsonEnabled = mavenInstallExtension.artifactPinning.enabled.get() && kspMavenInstallJson.exists() + mavenInstallJson = mavenInstallJson.name, + isMavenInstallJsonEnabled = mavenInstallExtension.artifactPinning.enabled.get() + && mavenInstallJson.exists() ) ) } diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/internal/RootBazelFileBuilder.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/internal/RootBazelFileBuilder.kt index da539567..6c262bc6 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/internal/RootBazelFileBuilder.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/internal/RootBazelFileBuilder.kt @@ -31,6 +31,8 @@ import com.grab.grazel.extension.KspProcessorConfig import com.grab.grazel.gradle.GradleProjectInfo import com.grab.grazel.gradle.dependencies.model.WorkspaceDependencies import com.grab.grazel.migrate.BazelFileBuilder +import org.gradle.api.logging.Logger +import org.gradle.api.logging.Logging import javax.inject.Inject import javax.inject.Singleton @@ -40,6 +42,8 @@ internal class RootBazelFileBuilder( private val workspaceDependencies: WorkspaceDependencies, ) : BazelFileBuilder { + private val logger: Logger = Logging.getLogger(RootBazelFileBuilder::class.java) + @Singleton class Factory @Inject @@ -72,12 +76,18 @@ internal class RootBazelFileBuilder( } private fun buildKspProcessors(): Set { - if (workspaceDependencies.kspResult.isEmpty()) return emptySet() + val kspDeps = workspaceDependencies.aggregatedRepos["ksp_maven"] ?: return emptySet() val kspProcessorConfigs = grazelExtension.rules.kotlin.ksp.processors - return workspaceDependencies.kspResult.values + return kspDeps .mapNotNull { dep -> val processorClass = dep.processorClass - if (processorClass.isNullOrEmpty()) return@mapNotNull null + if (processorClass.isNullOrEmpty()) { + logger.warn( + "Grazel: KSP processor ${dep.shortId} has no " + + "SymbolProcessorProvider service entry — skipping kt_ksp_plugin rule generation." + ) + return@mapNotNull null + } val (group, name, version) = dep.id.split(":") val config = kspProcessorConfigs["$group:$name"] ?: KspProcessorConfig() KspProcessor( diff --git a/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/gradle/DefaultDependenciesDataSourceTest.kt b/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/gradle/DefaultDependenciesDataSourceTest.kt index 4fc6b294..29c9d7bc 100644 --- a/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/gradle/DefaultDependenciesDataSourceTest.kt +++ b/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/gradle/DefaultDependenciesDataSourceTest.kt @@ -103,7 +103,7 @@ class DefaultDependenciesDataSourceTest { .get().apply { populateMavenStore( workspaceDependencies = WorkspaceDependencies( - result = buildMap { + variantDeps = buildMap { put( "debug", listOf( from("com.android.support:appcompat-v7:28.0.0:debug:false:null"), @@ -230,7 +230,7 @@ class DefaultDependenciesDataSourceTest { (dependencyResolutionService as DefaultDependencyResolutionService).apply { populateTransitiveDependenciesStore( WorkspaceDependencies( - result = emptyMap(), + variantDeps = emptyMap(), transitiveClasspath = mapOf( "com.android.support:appcompat-v7" to setOf( "com.android.support:support-v4:28.0.0", diff --git a/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/gradle/dependencies/DefaultDependencyResolutionServiceTest.kt b/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/gradle/dependencies/DefaultDependencyResolutionServiceTest.kt index 1b4eac3b..8c392b9f 100644 --- a/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/gradle/dependencies/DefaultDependencyResolutionServiceTest.kt +++ b/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/gradle/dependencies/DefaultDependencyResolutionServiceTest.kt @@ -262,7 +262,7 @@ class DefaultDependencyResolutionServiceTest { ) return WorkspaceDependencies( - result = mapOf( + variantDeps = mapOf( "variant1" to variant1Dependencies, "variant2" to variant2Dependencies ), @@ -282,7 +282,7 @@ class DefaultDependencyResolutionServiceTest { ) return WorkspaceDependencies( - result = mapOf( + variantDeps = mapOf( "variant1" to variant1Dependencies ), transitiveClasspath = transitiveClasspath diff --git a/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/migrate/android/DefaultAndroidLibraryDataExtractorTest.kt b/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/migrate/android/DefaultAndroidLibraryDataExtractorTest.kt index 26019e5a..006b1480 100644 --- a/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/migrate/android/DefaultAndroidLibraryDataExtractorTest.kt +++ b/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/migrate/android/DefaultAndroidLibraryDataExtractorTest.kt @@ -88,7 +88,7 @@ class DefaultAndroidLibraryDataExtractorTest { dependencyResolutionService.get().populateMavenStore( workspaceDependencies = WorkspaceDependencies( - result = buildMap { + variantDeps = buildMap { put( "maven", listOf( from("com.android.databinding:viewbinding:1.0.0:maven:false:null"), diff --git a/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/migrate/dependencies/DefaultArtifactPinnerTest.kt b/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/migrate/dependencies/DefaultArtifactPinnerTest.kt index 1d3f460d..8ae59354 100644 --- a/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/migrate/dependencies/DefaultArtifactPinnerTest.kt +++ b/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/migrate/dependencies/DefaultArtifactPinnerTest.kt @@ -113,7 +113,7 @@ class DefaultArtifactPinnerTest { val gradleServices = GradleServices.from(rootProject) artifactPinner.shouldRunPinning( workspace, - workspaceDependencies = WorkspaceDependencies(result = buildMap { + workspaceDependencies = WorkspaceDependencies(variantDeps = buildMap { put( DEFAULT_VARIANT, listOf(ResolvedDependency.from("androidx.annotation:annotation:1.2.0:maven:false:null")) @@ -146,7 +146,7 @@ class DefaultArtifactPinnerTest { assertTrue("Pinning is done and maven install json is generated") { artifactPinner.pinArtifacts( workspace, - workspaceDependencies = WorkspaceDependencies(result = buildMap { + workspaceDependencies = WorkspaceDependencies(variantDeps = buildMap { put( DEFAULT_VARIANT, listOf(ResolvedDependency.from("androidx.annotation:annotation:1.1.0:maven:false:null")) diff --git a/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/migrate/dependencies/MavenInstallArtifactsCalculatorTest.kt b/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/migrate/dependencies/MavenInstallArtifactsCalculatorTest.kt index d5e3c9b9..50487976 100644 --- a/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/migrate/dependencies/MavenInstallArtifactsCalculatorTest.kt +++ b/grazel-gradle-plugin/src/test/kotlin/com/grab/grazel/migrate/dependencies/MavenInstallArtifactsCalculatorTest.kt @@ -57,7 +57,7 @@ class MavenInstallArtifactsCalculatorTest { val repository = "MavenRepo" val workspaceDependencies = WorkspaceDependencies( - result = mapOf( + variantDeps = mapOf( "debug" to listOf( ResolvedDependency.fromId("androidx.core:core:1.0.0", repository) .copy(requiresJetifier = true), From ce8af25fbd70b69fa88dddeb0c281f4fb4d51008 Mon Sep 17 00:00:00 2001 From: Lim Min Kuan Date: Mon, 9 Mar 2026 16:26:57 +0800 Subject: [PATCH 2/2] Move ksp_maven string into Constant --- .../src/main/kotlin/com/grab/grazel/bazel/rules/KspRules.kt | 3 ++- .../grazel/gradle/dependencies/ComputeWorkspaceDependencies.kt | 3 ++- .../grazel/gradle/dependencies/DependencyResolutionService.kt | 3 ++- .../com/grab/grazel/migrate/internal/RootBazelFileBuilder.kt | 3 ++- .../src/main/kotlin/com/grab/grazel/util/Constants.kt | 2 ++ 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/bazel/rules/KspRules.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/bazel/rules/KspRules.kt index c35dd7c8..668bc318 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/bazel/rules/KspRules.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/bazel/rules/KspRules.kt @@ -21,6 +21,7 @@ import com.grab.grazel.bazel.starlark.StatementsBuilder import com.grab.grazel.bazel.starlark.array import com.grab.grazel.bazel.starlark.load import com.grab.grazel.bazel.starlark.quote +import com.grab.grazel.util.KSP_MAVEN /** * Data holder for KSP processor dependencies. @@ -72,7 +73,7 @@ fun kspPluginTarget(processor: KspProcessor): BazelDependency = private fun KspProcessor.toMavenLabel(): String { val groupPart = group.replace(".", "_").replace("-", "_") val namePart = name.replace(".", "_").replace("-", "_") - return "@ksp_maven//:${groupPart}_$namePart" + return "@${KSP_MAVEN}//:${groupPart}_$namePart" } /** diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/ComputeWorkspaceDependencies.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/ComputeWorkspaceDependencies.kt index 19e89156..e3d0a3f8 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/ComputeWorkspaceDependencies.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/ComputeWorkspaceDependencies.kt @@ -11,6 +11,7 @@ import com.grab.grazel.gradle.dependencies.model.allDependencies import com.grab.grazel.gradle.dependencies.model.merge import com.grab.grazel.gradle.dependencies.model.versionInfo import com.grab.grazel.gradle.variant.DEFAULT_VARIANT +import com.grab.grazel.util.KSP_MAVEN import com.grab.grazel.util.fromJson import org.gradle.api.file.RegularFile import java.util.stream.Collector @@ -172,7 +173,7 @@ internal class ComputeWorkspaceDependencies { classPaths.clear() return WorkspaceDependencies( variantDeps = reducedFinalClasspath, - aggregatedRepos = if (kspDeps.isNotEmpty()) mapOf("ksp_maven" to kspDeps) else emptyMap(), + aggregatedRepos = if (kspDeps.isNotEmpty()) mapOf(KSP_MAVEN to kspDeps) else emptyMap(), transitiveClasspath = transitiveClasspath ) } diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/DependencyResolutionService.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/DependencyResolutionService.kt index 2d42194d..72ec8d41 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/DependencyResolutionService.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/gradle/dependencies/DependencyResolutionService.kt @@ -22,6 +22,7 @@ import com.grab.grazel.gradle.dependencies.DependencyResolutionService.Companion import com.grab.grazel.gradle.dependencies.model.WorkspaceDependencies import com.grab.grazel.tasks.internal.ComputeWorkspaceDependenciesTask import com.grab.grazel.tasks.internal.GenerateBazelScriptsTask +import com.grab.grazel.util.KSP_MAVEN import com.grab.grazel.util.fromJson import kotlinx.coroutines.runBlocking import kotlinx.coroutines.sync.Mutex @@ -90,7 +91,7 @@ internal abstract class DefaultDependencyResolutionService : DependencyResolutio override fun getValidKspProcessorShortIds(): Set = workspaceDependencies ?.aggregatedRepos - ?.get("ksp_maven") + ?.get(KSP_MAVEN) ?.filter { it.processorClass != null } ?.map { it.shortId } ?.toSet() diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/internal/RootBazelFileBuilder.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/internal/RootBazelFileBuilder.kt index 6c262bc6..2d5ab2a5 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/internal/RootBazelFileBuilder.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/migrate/internal/RootBazelFileBuilder.kt @@ -31,6 +31,7 @@ import com.grab.grazel.extension.KspProcessorConfig import com.grab.grazel.gradle.GradleProjectInfo import com.grab.grazel.gradle.dependencies.model.WorkspaceDependencies import com.grab.grazel.migrate.BazelFileBuilder +import com.grab.grazel.util.KSP_MAVEN import org.gradle.api.logging.Logger import org.gradle.api.logging.Logging import javax.inject.Inject @@ -76,7 +77,7 @@ internal class RootBazelFileBuilder( } private fun buildKspProcessors(): Set { - val kspDeps = workspaceDependencies.aggregatedRepos["ksp_maven"] ?: return emptySet() + val kspDeps = workspaceDependencies.aggregatedRepos[KSP_MAVEN] ?: return emptySet() val kspProcessorConfigs = grazelExtension.rules.kotlin.ksp.processors return kspDeps .mapNotNull { dep -> diff --git a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/util/Constants.kt b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/util/Constants.kt index 600da762..027bca1e 100644 --- a/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/util/Constants.kt +++ b/grazel-gradle-plugin/src/main/kotlin/com/grab/grazel/util/Constants.kt @@ -31,3 +31,5 @@ internal const val BUILD_BAZEL_IGNORE = "BUILD$BAZEL_IGNORE" // Buildifier FILE NAME internal const val BUILDIFIER = "buildifier" + +internal const val KSP_MAVEN = "ksp_maven"