Skip to content

Commit 0bd16c3

Browse files
authored
Simplify property initializations (#1102)
1 parent eb61719 commit 0bd16c3

File tree

7 files changed

+85
-58
lines changed

7 files changed

+85
-58
lines changed

src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/GradleCompat.kt

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ import org.gradle.api.artifacts.ProjectDependency
66
import org.gradle.api.file.ConfigurableFileCollection
77
import org.gradle.api.model.ObjectFactory
88
import org.gradle.api.plugins.JavaPlugin
9+
import org.gradle.api.provider.MapProperty
910
import org.gradle.api.provider.Property
11+
import org.gradle.api.provider.Provider
12+
import org.gradle.api.provider.SetProperty
1013
import org.gradle.util.GradleVersion
1114

1215
/**
@@ -18,21 +21,53 @@ internal inline val Project.runtimeConfiguration: Configuration
1821
?: configurations.getByName("runtime")
1922
}
2023

21-
internal inline fun <reified T : Any> ObjectFactory.property(defaultValue: T? = null): Property<T> {
22-
return property(T::class.java).apply {
23-
if (defaultValue != null) convention(defaultValue)
24+
internal inline fun <reified V : Any> ObjectFactory.property(
25+
defaultValue: Any? = null,
26+
): Property<V> = property(V::class.java).apply {
27+
defaultValue ?: return@apply
28+
if (defaultValue is Provider<*>) {
29+
@Suppress("UNCHECKED_CAST")
30+
convention(defaultValue as Provider<V>)
31+
} else {
32+
convention(defaultValue as V)
33+
}
34+
}
35+
36+
@Suppress("UNCHECKED_CAST")
37+
internal inline fun <reified V : Any> ObjectFactory.setProperty(
38+
defaultValue: Any? = null,
39+
): SetProperty<V> = setProperty(V::class.java).apply {
40+
defaultValue ?: return@apply
41+
if (defaultValue is Provider<*>) {
42+
convention(defaultValue as Provider<Iterable<V>>)
43+
} else {
44+
convention(defaultValue as Iterable<V>)
45+
}
46+
}
47+
48+
@Suppress("UNCHECKED_CAST")
49+
internal inline fun <reified V : Any> ObjectFactory.mapProperty(
50+
defaultValue: Any? = null,
51+
): MapProperty<String, V> = mapProperty(String::class.java, V::class.java).apply {
52+
defaultValue ?: return@apply
53+
if (defaultValue is Provider<*>) {
54+
convention(defaultValue as Provider<Map<String, V>>)
55+
} else {
56+
convention(defaultValue as Map<String, V>)
2457
}
2558
}
2659

2760
/**
2861
* TODO: this could be removed after bumping the min Gradle requirement to 8.8 or above.
2962
*/
30-
internal fun ConfigurableFileCollection.conventionCompat(vararg paths: Any): ConfigurableFileCollection {
31-
return if (GradleVersion.current() >= GradleVersion.version("8.8")) {
32-
convention(paths)
63+
internal inline fun ObjectFactory.fileCollection(
64+
path: () -> Any,
65+
): ConfigurableFileCollection = fileCollection().apply {
66+
@Suppress("UnstableApiUsage")
67+
if (GradleVersion.current() >= GradleVersion.version("8.8")) {
68+
convention(path())
3369
} else {
34-
setFrom(paths)
35-
this
70+
setFrom(path())
3671
}
3772
}
3873

src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/Utils.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,6 @@ internal fun createDefaultFileTreeElement(
2626
return DefaultFileTreeElement(file, relativePath, chmod, stat)
2727
}
2828

29-
@Suppress("NOTHING_TO_INLINE")
30-
internal inline fun <T> unsafeLazy(noinline initializer: () -> T): Lazy<T> {
31-
return lazy(LazyThreadSafetyMode.NONE, initializer)
32-
}
33-
3429
internal fun Properties.inputStream(
3530
charset: Charset = Charsets.ISO_8859_1,
3631
comments: String = "",

src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/relocation/SimpleRelocator.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.jengelman.gradle.plugins.shadow.relocation
22

3+
import com.github.jengelman.gradle.plugins.shadow.internal.setProperty
34
import java.util.regex.Pattern
45
import org.codehaus.plexus.util.SelectorUtils
56
import org.gradle.api.model.ObjectFactory
@@ -30,10 +31,10 @@ public open class SimpleRelocator @JvmOverloads constructor(
3031
private val sourcePathExcludes = mutableSetOf<String>()
3132

3233
@get:Input
33-
public val includes: SetProperty<String> = objectFactory.setProperty(String::class.java)
34+
public val includes: SetProperty<String> = objectFactory.setProperty()
3435

3536
@get:Input
36-
public val excludes: SetProperty<String> = objectFactory.setProperty(String::class.java)
37+
public val excludes: SetProperty<String> = objectFactory.setProperty()
3738

3839
init {
3940
if (rawString) {

src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.kt

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ import com.github.jengelman.gradle.plugins.shadow.internal.DependencyFilter
88
import com.github.jengelman.gradle.plugins.shadow.internal.MinimizeDependencyFilter
99
import com.github.jengelman.gradle.plugins.shadow.internal.UnusedTracker
1010
import com.github.jengelman.gradle.plugins.shadow.internal.ZipCompressor
11-
import com.github.jengelman.gradle.plugins.shadow.internal.conventionCompat
11+
import com.github.jengelman.gradle.plugins.shadow.internal.fileCollection
1212
import com.github.jengelman.gradle.plugins.shadow.internal.property
13-
import com.github.jengelman.gradle.plugins.shadow.internal.unsafeLazy
13+
import com.github.jengelman.gradle.plugins.shadow.internal.setProperty
1414
import com.github.jengelman.gradle.plugins.shadow.relocation.CacheableRelocator
1515
import com.github.jengelman.gradle.plugins.shadow.relocation.Relocator
1616
import com.github.jengelman.gradle.plugins.shadow.relocation.SimpleRelocator
@@ -20,6 +20,7 @@ import com.github.jengelman.gradle.plugins.shadow.transformers.GroovyExtensionMo
2020
import com.github.jengelman.gradle.plugins.shadow.transformers.ServiceFileTransformer
2121
import com.github.jengelman.gradle.plugins.shadow.transformers.Transformer
2222
import com.github.jengelman.gradle.plugins.shadow.transformers.Transformer.Companion.create
23+
import java.io.File
2324
import java.util.jar.JarFile
2425
import org.apache.tools.zip.ZipOutputStream
2526
import org.gradle.api.Action
@@ -68,32 +69,37 @@ public abstract class ShadowJar :
6869
@get:Internal
6970
override val stats: ShadowStats = ShadowStats()
7071

72+
/**
73+
* Minimize the jar by removing unused classes.
74+
*
75+
* Defaults to `false`.
76+
*/
77+
@get:Input
78+
public open val minimizeJar: Property<Boolean> = objectFactory.property(false)
79+
7180
@get:Classpath
72-
public open val toMinimize: ConfigurableFileCollection by unsafeLazy {
73-
objectFactory.fileCollection().apply {
74-
if (minimizeJar.get()) {
75-
conventionCompat(dependencyFilterForMinimize.resolve(configurations.get()) - apiJars)
76-
}
81+
public open val toMinimize: ConfigurableFileCollection = objectFactory.fileCollection {
82+
minimizeJar.map {
83+
if (it) (dependencyFilterForMinimize.resolve(configurations.get()) - apiJars) else emptySet()
7784
}
7885
}
7986

8087
@get:Classpath
81-
public open val apiJars: ConfigurableFileCollection by unsafeLazy {
82-
objectFactory.fileCollection().apply {
83-
if (minimizeJar.get()) {
84-
conventionCompat(UnusedTracker.getApiJarsFromProject(project))
85-
}
88+
public open val apiJars: ConfigurableFileCollection = objectFactory.fileCollection {
89+
minimizeJar.map {
90+
if (it) UnusedTracker.getApiJarsFromProject(project) else emptySet()
8691
}
8792
}
8893

8994
@get:InputFiles
9095
@get:PathSensitive(PathSensitivity.RELATIVE)
91-
public open val sourceSetsClassesDirs: ConfigurableFileCollection by unsafeLazy {
92-
objectFactory.fileCollection().apply {
93-
if (minimizeJar.get()) {
94-
project.extensions.getByType(SourceSetContainer::class.java).forEach { sourceSet ->
95-
from(sourceSet.output.classesDirs.filter { it.isDirectory })
96-
}
96+
public open val sourceSetsClassesDirs: ConfigurableFileCollection = objectFactory.fileCollection {
97+
minimizeJar.map {
98+
if (it) {
99+
project.extensions.getByType(SourceSetContainer::class.java)
100+
.map { sourceSet -> sourceSet.output.classesDirs.filter(File::isDirectory) }
101+
} else {
102+
emptySet()
97103
}
98104
}
99105
}
@@ -113,22 +119,23 @@ public abstract class ShadowJar :
113119
}
114120

115121
@get:Nested
116-
public open val transformers: SetProperty<Transformer> = objectFactory.setProperty(Transformer::class.java)
122+
public open val transformers: SetProperty<Transformer> = objectFactory.setProperty()
117123

118124
@get:Nested
119-
public open val relocators: SetProperty<Relocator> = objectFactory.setProperty(Relocator::class.java)
125+
public open val relocators: SetProperty<Relocator> = objectFactory.setProperty()
120126

121127
@get:Classpath
122128
@get:Optional
123-
public open val configurations: SetProperty<Configuration> = objectFactory.setProperty(Configuration::class.java)
129+
public open val configurations: SetProperty<Configuration> = objectFactory.setProperty()
124130

125131
@get:Internal
126132
public open val dependencyFilter: Property<DependencyFilter> =
127133
objectFactory.property(DefaultDependencyFilter(project))
128134

129135
@get:Classpath
130-
public open val includedDependencies: ConfigurableFileCollection = objectFactory.fileCollection()
131-
.conventionCompat(dependencyFilter.map { it.resolve(configurations.get()) })
136+
public open val includedDependencies: ConfigurableFileCollection = objectFactory.fileCollection {
137+
dependencyFilter.zip(configurations) { df, cs -> df.resolve(cs) }
138+
}
132139

133140
/**
134141
* Enable relocation of packages in the jar.
@@ -146,14 +153,6 @@ public abstract class ShadowJar :
146153
@get:Input
147154
public open val relocationPrefix: Property<String> = objectFactory.property(ShadowBasePlugin.SHADOW)
148155

149-
/**
150-
* Minimize the jar by removing unused classes.
151-
*
152-
* Defaults to `false`.
153-
*/
154-
@get:Input
155-
public open val minimizeJar: Property<Boolean> = objectFactory.property(false)
156-
157156
@Internal
158157
override fun getManifest(): InheritManifest = super.manifest as InheritManifest
159158

src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/ManifestAppenderTransformer.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.jengelman.gradle.plugins.shadow.transformers
22

3+
import com.github.jengelman.gradle.plugins.shadow.internal.setProperty
34
import java.io.ByteArrayOutputStream
45
import java.io.IOException
56
import java.util.jar.JarFile.MANIFEST_NAME
@@ -25,10 +26,8 @@ public open class ManifestAppenderTransformer @Inject constructor(
2526
) : Transformer {
2627
private var manifestContents = ByteArray(0)
2728

28-
@Suppress("UNCHECKED_CAST")
2929
@get:Input
30-
public open val attributes: SetProperty<Pair<String, Comparable<*>>> =
31-
objectFactory.setProperty(Pair::class.java) as SetProperty<Pair<String, Comparable<*>>>
30+
public open val attributes: SetProperty<Pair<String, Comparable<*>>> = objectFactory.setProperty()
3231

3332
override fun canTransformResource(element: FileTreeElement): Boolean {
3433
return MANIFEST_NAME.equals(element.relativePath.pathString, ignoreCase = true)

src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/ManifestResourceTransformer.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.jengelman.gradle.plugins.shadow.transformers
22

3+
import com.github.jengelman.gradle.plugins.shadow.internal.mapProperty
34
import com.github.jengelman.gradle.plugins.shadow.internal.property
45
import com.github.jengelman.gradle.plugins.shadow.transformers.TransformerContext.Companion.getEntryTimestamp
56
import java.io.IOException
@@ -39,8 +40,7 @@ public open class ManifestResourceTransformer @Inject constructor(
3940

4041
@get:Optional
4142
@get:Input
42-
public open val manifestEntries: MapProperty<String, Attributes> =
43-
objectFactory.mapProperty(String::class.java, Attributes::class.java)
43+
public open val manifestEntries: MapProperty<String, Attributes> = objectFactory.mapProperty()
4444

4545
override fun canTransformResource(element: FileTreeElement): Boolean {
4646
val path = element.relativePath.pathString

src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/PropertiesFileTransformer.kt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ package com.github.jengelman.gradle.plugins.shadow.transformers
22

33
import com.github.jengelman.gradle.plugins.shadow.internal.CleanProperties
44
import com.github.jengelman.gradle.plugins.shadow.internal.inputStream
5+
import com.github.jengelman.gradle.plugins.shadow.internal.mapProperty
56
import com.github.jengelman.gradle.plugins.shadow.internal.property
7+
import com.github.jengelman.gradle.plugins.shadow.internal.setProperty
68
import com.github.jengelman.gradle.plugins.shadow.transformers.PropertiesFileTransformer.MergeStrategy
79
import groovy.lang.Closure
810
import groovy.lang.Closure.IDENTITY
@@ -107,12 +109,10 @@ public open class PropertiesFileTransformer @Inject constructor(
107109
internal val propertiesEntries = mutableMapOf<String, CleanProperties>()
108110

109111
@get:Input
110-
public open val paths: SetProperty<String> = objectFactory.setProperty(String::class.java)
112+
public open val paths: SetProperty<String> = objectFactory.setProperty()
111113

112-
@Suppress("UNCHECKED_CAST")
113114
@get:Input
114-
public open val mappings: MapProperty<String, Map<String, String>> =
115-
objectFactory.mapProperty(String::class.java, Map::class.java) as MapProperty<String, Map<String, String>>
115+
public open val mappings: MapProperty<String, Map<String, String>> = objectFactory.mapProperty()
116116

117117
@get:Input
118118
public open val mergeStrategy: Property<MergeStrategy> = objectFactory.property(MergeStrategy.First)
@@ -123,10 +123,8 @@ public open class PropertiesFileTransformer @Inject constructor(
123123
@get:Input
124124
public open val charsetName: Property<String> = objectFactory.property(Charsets.ISO_8859_1.name())
125125

126-
@Suppress("UNCHECKED_CAST")
127126
@get:Internal
128-
public open val keyTransformer: Property<Closure<String>> =
129-
objectFactory.property(IDENTITY) as Property<Closure<String>>
127+
public open val keyTransformer: Property<Closure<String>> = objectFactory.property(IDENTITY)
130128

131129
override fun canTransformResource(element: FileTreeElement): Boolean {
132130
val mappings = mappings.get()

0 commit comments

Comments
 (0)