Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoid cross-project access of the 'group' property #1198

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ final class TestFixturesTestProject2 extends AbstractProject {
private final Set<Advice> expectedConsumerAdvice() {
[
Advice.ofChange(projectCoordinates(producerProjectPath), 'api', 'implementation'),
Advice.ofRemove(projectCoordinates(producerProjectPath, 'org.example.producer:producer-test-fixtures'), 'api')
Advice.ofRemove(projectCoordinates(producerProjectPath, ':producer-test-fixtures'), 'api')
]
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package com.autonomousapps.internal.utils

import com.autonomousapps.internal.GradleVersions
import com.autonomousapps.model.*
import com.autonomousapps.model.GradleVariantIdentification.Companion.ROOT
import org.gradle.api.GradleException
import org.gradle.api.artifacts.*
import org.gradle.api.artifacts.Dependency
Expand All @@ -22,6 +23,7 @@ import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.ConfigurableFileTree
import org.gradle.api.internal.artifacts.DefaultProjectComponentIdentifier
import org.gradle.api.provider.Provider
import org.gradle.internal.component.external.model.ProjectDerivedCapability
import org.gradle.internal.component.local.model.OpaqueComponentArtifactIdentifier
import org.gradle.internal.component.local.model.OpaqueComponentIdentifier
import java.io.File
Expand Down Expand Up @@ -98,7 +100,7 @@ internal fun Configuration.rootCoordinates(): Coordinates = incoming.resolutionR
internal fun ResolvedComponentResult.rootCoordinates(): Coordinates {
return id
// For the root, the 'GradleVariantIdentification' is always empty as there is only one root (which we match later)
.toCoordinates(GradleVariantIdentification(setOf("ROOT"), emptyMap()))
.toCoordinates(GradleVariantIdentification(ROOT, emptyMap()))
}

/** Converts this [ComponentIdentifier] to group-artifact-version (GAV) coordinates in a tuple of (GA, V?). */
Expand Down Expand Up @@ -300,4 +302,7 @@ internal fun ResolvedVariantResult?.toGradleVariantIdentification(): GradleVaria
)
}

private fun Capability.toGA() = "$group:$name".intern()
private fun Capability.toGA() = when(this) {
is ProjectDerivedCapability -> ":$name".intern()
else -> "$group:$name".intern()
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ data class GradleVariantIdentification(

companion object {
val EMPTY = GradleVariantIdentification(emptySet(), emptyMap())
val ROOT = setOf(":ROOT")
}

override fun compareTo(other: GradleVariantIdentification): Int {
Expand All @@ -28,13 +29,16 @@ data class GradleVariantIdentification(
*/
fun variantMatches(target: Coordinates): Boolean = when (target) {
is FlatCoordinates -> true
is ProjectCoordinates -> if (capabilities.isEmpty()) {
is ProjectCoordinates, is IncludedBuildCoordinates -> if (capabilities.isEmpty()) {
// for projects, we need to check with endsWith
target.gradleVariantIdentification.capabilities.any {
// If empty, needs to contain the 'default' capability (for projects we need to check with endsWith)
// If empty, needs to contain the 'default' capability
it.endsWith(target.identifier.substring(target.identifier.lastIndexOf(":")))
}
} else {
target.gradleVariantIdentification.capabilities.containsAll(capabilities)
capabilities.all { myCapability ->
target.gradleVariantIdentification.capabilities.any { myCapability.endsWith(it.substring(it.lastIndexOf(":"))) }
}
}

else -> if (capabilities.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import com.autonomousapps.internal.utils.fromJson
import com.autonomousapps.internal.utils.fromJsonSet
import com.autonomousapps.internal.utils.getAndDelete
import com.autonomousapps.model.*
import com.autonomousapps.model.GradleVariantIdentification.Companion.ROOT
import org.gradle.api.DefaultTask
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.Property
Expand Down Expand Up @@ -148,7 +149,7 @@ abstract class ComputeDominatorTreeTask : DefaultTask() {
}

val graphView = graphView.fromJson<DependencyGraphView>()
val project = ProjectCoordinates(projectPath.get(), GradleVariantIdentification(setOf("ROOT"), emptyMap()), ":")
val project = ProjectCoordinates(projectPath.get(), GradleVariantIdentification(ROOT, emptyMap()), ":")
val tree = DominanceTree(graphView.graph, project)

val nodeWriter = BySize(
Expand Down
3 changes: 2 additions & 1 deletion src/main/kotlin/com/autonomousapps/tasks/ReasonTask.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import com.autonomousapps.internal.reason.DependencyAdviceExplainer
import com.autonomousapps.internal.reason.ModuleAdviceExplainer
import com.autonomousapps.internal.utils.*
import com.autonomousapps.model.*
import com.autonomousapps.model.GradleVariantIdentification.Companion.ROOT
import com.autonomousapps.model.intermediates.BundleTrace
import com.autonomousapps.model.intermediates.Usage
import org.gradle.api.DefaultTask
Expand Down Expand Up @@ -183,7 +184,7 @@ abstract class ReasonTask @Inject constructor(

override fun execute() {
val reason = DependencyAdviceExplainer(
project = ProjectCoordinates(projectPath, GradleVariantIdentification(setOf("ROOT"), emptyMap()), ":"),
project = ProjectCoordinates(projectPath, GradleVariantIdentification(ROOT, emptyMap()), ":"),
requestedId = requestedCoord,
target = coord,
usages = usages,
Expand Down
Loading