Skip to content
Merged
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
38 changes: 24 additions & 14 deletions api/shadow.api
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,29 @@ public class com/github/jengelman/gradle/plugins/shadow/transformers/ManifestRes
public fun transform (Lcom/github/jengelman/gradle/plugins/shadow/transformers/TransformerContext;)V
}

public abstract class com/github/jengelman/gradle/plugins/shadow/transformers/PatternFilterableResourceTransformer : com/github/jengelman/gradle/plugins/shadow/transformers/ResourceTransformer, org/gradle/api/tasks/util/PatternFilterable {
public fun <init> (Lorg/gradle/api/tasks/util/PatternSet;)V
public fun canTransformResource (Lorg/gradle/api/file/FileTreeElement;)Z
public fun exclude (Lgroovy/lang/Closure;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun exclude (Ljava/lang/Iterable;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun exclude (Lorg/gradle/api/specs/Spec;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun exclude ([Ljava/lang/String;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun getExcludes ()Ljava/util/Set;
public fun getIncludes ()Ljava/util/Set;
public fun getName ()Ljava/lang/String;
public fun getObjectFactory ()Lorg/gradle/api/model/ObjectFactory;
public final fun getPatternSet ()Lorg/gradle/api/tasks/util/PatternSet;
public fun hasTransformedResource ()Z
public fun include (Lgroovy/lang/Closure;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun include (Ljava/lang/Iterable;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun include (Lorg/gradle/api/specs/Spec;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun include ([Ljava/lang/String;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun modifyOutputStream (Lorg/apache/tools/zip/ZipOutputStream;Z)V
public fun setExcludes (Ljava/lang/Iterable;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun setIncludes (Ljava/lang/Iterable;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun transform (Lcom/github/jengelman/gradle/plugins/shadow/transformers/TransformerContext;)V
}

public class com/github/jengelman/gradle/plugins/shadow/transformers/PreserveFirstFoundResourceTransformer : com/github/jengelman/gradle/plugins/shadow/transformers/ResourceTransformer {
public fun <init> (Lorg/gradle/api/model/ObjectFactory;)V
public fun canTransformResource (Lorg/gradle/api/file/FileTreeElement;)Z
Expand Down Expand Up @@ -447,26 +470,13 @@ public final class com/github/jengelman/gradle/plugins/shadow/transformers/Resou
public fun transform (Lcom/github/jengelman/gradle/plugins/shadow/transformers/TransformerContext;)V
}

public class com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer : com/github/jengelman/gradle/plugins/shadow/transformers/ResourceTransformer, org/gradle/api/tasks/util/PatternFilterable {
public class com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer : com/github/jengelman/gradle/plugins/shadow/transformers/PatternFilterableResourceTransformer {
public fun <init> ()V
public fun <init> (Lorg/gradle/api/tasks/util/PatternSet;)V
public synthetic fun <init> (Lorg/gradle/api/tasks/util/PatternSet;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun canTransformResource (Lorg/gradle/api/file/FileTreeElement;)Z
public fun exclude (Lgroovy/lang/Closure;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun exclude (Ljava/lang/Iterable;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun exclude (Lorg/gradle/api/specs/Spec;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun exclude ([Ljava/lang/String;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun getExcludes ()Ljava/util/Set;
public fun getIncludes ()Ljava/util/Set;
public fun getPath ()Ljava/lang/String;
public fun hasTransformedResource ()Z
public fun include (Lgroovy/lang/Closure;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun include (Ljava/lang/Iterable;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun include (Lorg/gradle/api/specs/Spec;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun include ([Ljava/lang/String;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun modifyOutputStream (Lorg/apache/tools/zip/ZipOutputStream;Z)V
public fun setExcludes (Ljava/lang/Iterable;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun setIncludes (Ljava/lang/Iterable;)Lorg/gradle/api/tasks/util/PatternFilterable;
public fun setPath (Ljava/lang/String;)V
public fun transform (Lcom/github/jengelman/gradle/plugins/shadow/transformers/TransformerContext;)V
}
Expand Down
5 changes: 5 additions & 0 deletions docs/changes/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@

## [Unreleased](https://github.com/GradleUp/shadow/compare/9.2.2...HEAD) - 2025-xx-xx

### Added

- Add `PatternFilterableResourceTransformer` to simplify pattern based `ResourceTransformer`s. ([#1849](https://github.com/GradleUp/shadow/pull/1849))
- Expose `patternSet` of `ServiceFileTransformer` as `public`. ([#1849](https://github.com/GradleUp/shadow/pull/1849))

### Changed

- Change the group of `startShadowScripts` from `application` to `other`. ([#1797](https://github.com/GradleUp/shadow/pull/1797))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.github.jengelman.gradle.plugins.shadow.transformers

import org.gradle.api.file.FileTreeElement
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.util.PatternFilterable
import org.gradle.api.tasks.util.PatternSet

/**
* A base class for resource transformers that support pattern filtering.
*
* @param patternSet The [PatternSet] used for filtering resources.
*/
public abstract class PatternFilterableResourceTransformer(
@Internal public val patternSet: PatternSet,
) : ResourceTransformer by ResourceTransformer.Companion,
PatternFilterable by patternSet {

override fun canTransformResource(element: FileTreeElement): Boolean {
return patternSet.asSpec.isSatisfiedBy(element)
}

@Input // Trigger task executions after includes changed.
override fun getIncludes(): MutableSet<String> = patternSet.includes

@Input // Trigger task executions after excludes changed.
override fun getExcludes(): MutableSet<String> = patternSet.excludes
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,7 @@ import com.github.jengelman.gradle.plugins.shadow.internal.zipEntry
import com.github.jengelman.gradle.plugins.shadow.relocation.relocateClass
import com.github.jengelman.gradle.plugins.shadow.transformers.GroovyExtensionModuleTransformer.Companion.PATH_LEGACY_GROOVY_EXTENSION_MODULE_DESCRIPTOR
import org.apache.tools.zip.ZipOutputStream
import org.gradle.api.file.FileTreeElement
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.util.PatternFilterable
import org.gradle.api.tasks.util.PatternSet

/**
Expand All @@ -25,11 +22,10 @@ import org.gradle.api.tasks.util.PatternSet
*/
@CacheableTransformer
public open class ServiceFileTransformer(
private val patternSet: PatternSet = PatternSet()
patternSet: PatternSet = PatternSet()
.include(SERVICES_PATTERN)
.exclude(PATH_LEGACY_GROOVY_EXTENSION_MODULE_DESCRIPTOR),
) : ResourceTransformer,
PatternFilterable by patternSet {
) : PatternFilterableResourceTransformer(patternSet = patternSet) {
@get:Internal
internal val serviceEntries = mutableMapOf<String, MutableSet<String>>()

Expand All @@ -40,10 +36,6 @@ public open class ServiceFileTransformer(
patternSet.setIncludes(listOf("$value/**"))
}

override fun canTransformResource(element: FileTreeElement): Boolean {
return patternSet.asSpec.isSatisfiedBy(element)
}

override fun transform(context: TransformerContext) {
val resource = path + "/" +
context.relocators.relocateClass(context.path.substringAfter("$path/"))
Expand All @@ -63,12 +55,6 @@ public open class ServiceFileTransformer(
}
}

@Input // Trigger task executions after includes changed.
override fun getIncludes(): MutableSet<String> = patternSet.includes

@Input // Trigger task executions after excludes changed.
override fun getExcludes(): MutableSet<String> = patternSet.excludes

private companion object {
private const val SERVICES_PATH = "META-INF/services"
private const val SERVICES_PATTERN = "$SERVICES_PATH/**"
Expand Down