Skip to content

Commit

Permalink
Reduce dependency and project overloads in DependencyFilter
Browse files Browse the repository at this point in the history
They are merged to accept `Any`.
  • Loading branch information
Goooler committed Mar 11, 2025
1 parent 0ceb3b3 commit 8fd8e04
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 42 deletions.
3 changes: 0 additions & 3 deletions api/shadow.api
Original file line number Diff line number Diff line change
Expand Up @@ -150,12 +150,9 @@ public class com/github/jengelman/gradle/plugins/shadow/relocation/SimpleRelocat

public abstract interface class com/github/jengelman/gradle/plugins/shadow/tasks/DependencyFilter : java/io/Serializable {
public abstract fun dependency (Ljava/lang/Object;)Lorg/gradle/api/specs/Spec;
public abstract fun dependency (Lorg/gradle/api/artifacts/Dependency;)Lorg/gradle/api/specs/Spec;
public abstract fun exclude (Lorg/gradle/api/specs/Spec;)V
public abstract fun include (Lorg/gradle/api/specs/Spec;)V
public abstract fun project (Ljava/lang/Object;)Lorg/gradle/api/specs/Spec;
public abstract fun project (Ljava/lang/String;)Lorg/gradle/api/specs/Spec;
public abstract fun project (Ljava/util/Map;)Lorg/gradle/api/specs/Spec;
public abstract fun resolve (Ljava/util/Collection;)Lorg/gradle/api/file/FileCollection;
public abstract fun resolve (Lorg/gradle/api/artifacts/Configuration;)Lorg/gradle/api/file/FileCollection;
}
Expand Down
4 changes: 4 additions & 0 deletions docs/changes/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@

- Fix relocation exclusion for file patterns like `kotlin/kotlin.kotlin_builtins`. ([#1313](https://github.com/GradleUp/shadow/pull/1313))

**Removed**

- **BREAKING CHANGE:** Reduce dependency and project overloads in `DependencyFilter`. ([#1328](https://github.com/GradleUp/shadow/pull/1328))


## [v9.0.0-beta10] (2025-03-05)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,42 +47,35 @@ internal sealed class AbstractDependencyFilter(

override fun project(notation: Any): Spec<ResolvedDependency> {
@Suppress("UNCHECKED_CAST")
return when (notation) {
is ProjectDependency -> dependency(notation)
is Provider<*> -> project(notation.get() as String)
is String -> project(notation)
is Map<*, *> -> project(notation as Map<String, *>)
else -> error("Unsupported notation type: ${notation::class.java}")
val realNotation = when (notation) {
is ProjectDependency -> return notation.toSpec()
is Provider<*> -> mapOf("path" to notation.get())
is String -> mapOf("path" to notation)
is Map<*, *> -> notation as Map<String, Any>
else -> throw IllegalArgumentException("Unsupported notation type: ${notation::class.java}")
}
}

override fun project(notation: Map<String, *>): Spec<ResolvedDependency> {
return dependency(project.dependencies.project(notation))
}

override fun project(path: String): Spec<ResolvedDependency> {
return project(mapOf("path" to path))
return project.dependencies.project(realNotation).toSpec()
}

override fun dependency(dependencyNotation: Any): Spec<ResolvedDependency> {
val realNotation = when (dependencyNotation) {
is Provider<*> -> dependencyNotation.get()
else -> dependencyNotation
}
return dependency(project.dependencies.create(realNotation))
}

override fun dependency(dependency: Dependency): Spec<ResolvedDependency> {
return Spec<ResolvedDependency> { resolvedDependency ->
(dependency.group == null || resolvedDependency.moduleGroup.matches(dependency.group!!.toRegex())) &&
resolvedDependency.moduleName.matches(dependency.name.toRegex()) &&
(dependency.version == null || resolvedDependency.moduleVersion.matches(dependency.version!!.toRegex()))
}
return project.dependencies.create(realNotation).toSpec()
}

protected fun ResolvedDependency.isIncluded(): Boolean {
val include = includeSpecs.isEmpty() || includeSpecs.any { it.isSatisfiedBy(this) }
val exclude = excludeSpecs.isNotEmpty() && excludeSpecs.any { it.isSatisfiedBy(this) }
return include && !exclude
}

private fun Dependency.toSpec(): Spec<ResolvedDependency> {
return Spec<ResolvedDependency> { resolvedDependency ->
(group == null || resolvedDependency.moduleGroup.matches(group!!.toRegex())) &&
resolvedDependency.moduleName.matches(name.toRegex()) &&
(version == null || resolvedDependency.moduleVersion.matches(version!!.toRegex()))
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package com.github.jengelman.gradle.plugins.shadow.tasks

import java.io.Serializable
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.Dependency
import org.gradle.api.artifacts.ResolvedDependency
import org.gradle.api.file.FileCollection
import org.gradle.api.specs.Spec
Expand Down Expand Up @@ -34,23 +33,8 @@ public interface DependencyFilter : Serializable {
*/
public fun project(notation: Any): Spec<ResolvedDependency>

/**
* Create a [Spec] that matches the provided project [notation].
*/
public fun project(notation: Map<String, *>): Spec<ResolvedDependency>

/**
* Create a [Spec] that matches the provided project [path].
*/
public fun project(path: String): Spec<ResolvedDependency>

/**
* Create a [Spec] that matches the provided [dependencyNotation].
*/
public fun dependency(dependencyNotation: Any): Spec<ResolvedDependency>

/**
* Create a [Spec] that matches the provided [dependency].
*/
public fun dependency(dependency: Dependency): Spec<ResolvedDependency>
}

0 comments on commit 8fd8e04

Please # to comment.