Skip to content

Commit f7acdac

Browse files
authored
Replace uses of Poperty<File> with FileProperty in plugins (#6516)
This is the recommended approach by Gradle https://docs.gradle.org/current/userguide/properties_providers.html#managed_properties
1 parent 39e7c92 commit f7acdac

File tree

11 files changed

+79
-66
lines changed

11 files changed

+79
-66
lines changed

buildSrc/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import java.nio.file.Paths
2323
import org.gradle.api.Plugin
2424
import org.gradle.api.Project
2525
import org.gradle.api.artifacts.ProjectDependency
26+
import org.gradle.api.file.ConfigurableFileCollection
2627
import org.gradle.api.provider.Provider
2728
import org.gradle.api.publish.PublishingExtension
2829
import org.gradle.api.publish.maven.MavenPom
@@ -124,7 +125,10 @@ abstract class BaseFirebaseLibraryPlugin : Plugin<Project> {
124125
Coverage.apply(library)
125126
}
126127

127-
protected fun getApiInfo(project: Project, srcDirs: Set<File>): TaskProvider<ApiInformationTask> {
128+
protected fun getApiInfo(
129+
project: Project,
130+
srcDirs: ConfigurableFileCollection,
131+
): TaskProvider<ApiInformationTask> {
128132
val outputFile =
129133
project.rootProject.file(
130134
Paths.get(
@@ -138,7 +142,7 @@ abstract class BaseFirebaseLibraryPlugin : Plugin<Project> {
138142
project.file("api.txt").takeIf { it.exists() } ?: project.rootProject.file("empty-api.txt")
139143
val apiInfo =
140144
project.tasks.register<ApiInformationTask>("apiInformation") {
141-
sources.value(project.provider { srcDirs })
145+
sources.from(project.provider { srcDirs })
142146
apiTxtFile.set(apiTxt)
143147
baselineFile.set(project.file("baseline.txt"))
144148
this.outputFile.set(outputFile)
@@ -157,17 +161,17 @@ abstract class BaseFirebaseLibraryPlugin : Plugin<Project> {
157161
}
158162
}
159163

160-
protected fun getGenerateApiTxt(project: Project, srcDirs: Set<File>) =
164+
protected fun getGenerateApiTxt(project: Project, srcDirs: ConfigurableFileCollection) =
161165
project.tasks.register<GenerateApiTxtTask>("generateApiTxtFile") {
162-
sources.value(project.provider { srcDirs })
166+
sources.from(project.provider { srcDirs })
163167
apiTxtFile.set(project.file("api.txt"))
164168
baselineFile.set(project.file("baseline.txt"))
165169
updateBaseline.set(project.hasProperty("updateBaseline"))
166170
}
167171

168-
protected fun getDocStubs(project: Project, srcDirs: Set<File>) =
172+
protected fun getDocStubs(project: Project, srcDirs: ConfigurableFileCollection) =
169173
project.tasks.register<GenerateStubsTask>("docStubs") {
170-
sources.value(project.provider { srcDirs })
174+
sources.from(project.provider { srcDirs })
171175
}
172176

173177
/**

buildSrc/src/main/java/com/google/firebase/gradle/plugins/DackkaGenerationTask.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import java.io.File
2020
import javax.inject.Inject
2121
import org.gradle.api.DefaultTask
2222
import org.gradle.api.file.FileCollection
23+
import org.gradle.api.file.RegularFileProperty
2324
import org.gradle.api.provider.ListProperty
2425
import org.gradle.api.provider.Property
2526
import org.gradle.api.tasks.CacheableTask
@@ -53,7 +54,7 @@ import org.json.JSONObject
5354
@CacheableTask
5455
abstract class GenerateDocumentationTaskExtension : DefaultTask() {
5556
@get:[InputFile Classpath]
56-
abstract val dackkaJarFile: Property<File>
57+
abstract val dackkaJarFile: RegularFileProperty
5758

5859
@get:[InputFiles Classpath]
5960
abstract val dependencies: Property<FileCollection>
@@ -72,7 +73,7 @@ abstract class GenerateDocumentationTaskExtension : DefaultTask() {
7273

7374
@get:Input abstract val clientName: Property<String>
7475

75-
@get:OutputDirectory abstract val outputDirectory: Property<File>
76+
@get:OutputDirectory abstract val outputDirectory: RegularFileProperty
7677
}
7778

7879
/**
@@ -123,7 +124,7 @@ constructor(private val workerExecutor: WorkerExecutor) : GenerateDocumentationT
123124
val jsonMap =
124125
mapOf(
125126
"moduleName" to "",
126-
"outputDir" to outputDirectory.get().absolutePath,
127+
"outputDir" to outputDirectory.get().asFile.absolutePath,
127128
"globalLinks" to "",
128129
"sourceSets" to
129130
listOf(
@@ -215,7 +216,7 @@ constructor(private val workerExecutor: WorkerExecutor) : GenerateDocumentationT
215216
*/
216217
interface DackkaParams : WorkParameters {
217218
val args: ListProperty<String>
218-
val dackkaFile: Property<File>
219+
val dackkaFile: RegularFileProperty
219220
}
220221

221222
/**

buildSrc/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ package com.google.firebase.gradle.plugins
1818

1919
import com.android.build.api.attributes.BuildTypeAttr
2020
import com.android.build.gradle.LibraryExtension
21-
import java.io.File
2221
import org.gradle.api.Plugin
2322
import org.gradle.api.Project
23+
import org.gradle.api.file.RegularFile
2424
import org.gradle.api.provider.Provider
2525
import org.gradle.api.tasks.Copy
2626
import org.gradle.api.tasks.Delete
@@ -204,26 +204,26 @@ abstract class DackkaPlugin : Plugin<Project> {
204204
private fun GenerateDocumentationTask.applyCommonConfigurations() {
205205
dependsOnAndMustRunAfter("createFullJarRelease")
206206

207-
val dackkaFile = project.provider { project.dackkaConfig.singleFile }
207+
val dackkaFile = project.layout.projectDirectory.file(project.dackkaConfig.singleFile.path)
208208

209-
dackkaJarFile.set(dackkaFile)
209+
dackkaJarFile.convention(dackkaFile)
210210
clientName.set(project.firebaseLibrary.artifactId)
211211
}
212212

213213
private fun registerFiresiteTransformTask(
214214
project: Project,
215-
dackkaOutputDirectory: Provider<File>,
215+
dackkaOutputDirectory: Provider<RegularFile>,
216216
) =
217217
project.tasks.register<FiresiteTransformTask>("firesiteTransform") {
218218
val outputDir by tempFile("dackkaTransformedFiles")
219219

220-
dackkaFiles.set(dackkaOutputDirectory.childFile("docs/reference"))
220+
dackkaFiles.set(dackkaOutputDirectory)
221221
outputDirectory.set(outputDir)
222222
}
223223

224224
private fun registerCopyDocsToCommonDirectoryTask(
225225
project: Project,
226-
transformedFilesDirectory: Provider<File>,
226+
transformedFilesDirectory: Provider<RegularFile>,
227227
) =
228228
project.tasks.register<Copy>("copyDocsToCommonDirectory") {
229229
from(transformedFilesDirectory)

buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseAndroidLibraryPlugin.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import com.google.firebase.gradle.plugins.ci.device.FirebaseTestServer
2323
import com.google.firebase.gradle.plugins.license.LicenseResolverPlugin
2424
import com.google.firebase.gradle.plugins.semver.ApiDiffer
2525
import com.google.firebase.gradle.plugins.semver.GmavenCopier
26-
import java.io.File
2726
import org.gradle.api.JavaVersion
2827
import org.gradle.api.Project
2928
import org.gradle.api.attributes.Attribute
@@ -164,14 +163,14 @@ class FirebaseAndroidLibraryPlugin : BaseFirebaseLibraryPlugin() {
164163
}
165164

166165
private fun setupApiInformationAnalysis(project: Project, android: LibraryExtension) {
167-
val srcDirs = android.sourceSets.getByName("main").java.srcDirs
166+
val srcDirs = project.files(android.sourceSets.getByName("main").java.srcDirs)
168167

169168
val mainSourceSets = android.sourceSets.getByName("main")
170169
val getKotlinDirectories = mainSourceSets::class.java.getDeclaredMethod("getKotlinDirectories")
171170
val kotlinSrcDirs = getKotlinDirectories.invoke(mainSourceSets)
172171

173-
val apiInfo = getApiInfo(project, kotlinSrcDirs as Set<File>)
174-
val generateApiTxt = getGenerateApiTxt(project, kotlinSrcDirs)
172+
val apiInfo = getApiInfo(project, project.files(kotlinSrcDirs))
173+
val generateApiTxt = getGenerateApiTxt(project, project.files(kotlinSrcDirs))
175174
val docStubs = getDocStubs(project, srcDirs)
176175

177176
project.tasks.getByName("check").dependsOn(docStubs)

buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,14 @@ class FirebaseJavaLibraryPlugin : BaseFirebaseLibraryPlugin() {
107107

108108
private fun setupApiInformationAnalysis(project: Project) {
109109
val srcDirs =
110-
project.convention.getPlugin<JavaPluginConvention>().sourceSets.getByName("main").java.srcDirs
110+
project.files(
111+
project.convention
112+
.getPlugin<JavaPluginConvention>()
113+
.sourceSets
114+
.getByName("main")
115+
.java
116+
.srcDirs
117+
)
111118

112119
val apiInfo = getApiInfo(project, srcDirs)
113120

buildSrc/src/main/java/com/google/firebase/gradle/plugins/FiresiteTransformTask.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ package com.google.firebase.gradle.plugins
1818

1919
import java.io.File
2020
import org.gradle.api.DefaultTask
21-
import org.gradle.api.provider.Property
21+
import org.gradle.api.file.RegularFileProperty
2222
import org.gradle.api.tasks.CacheableTask
2323
import org.gradle.api.tasks.InputDirectory
2424
import org.gradle.api.tasks.OutputDirectory
@@ -46,16 +46,16 @@ import org.gradle.api.tasks.TaskAction
4646
abstract class FiresiteTransformTask : DefaultTask() {
4747
@get:InputDirectory
4848
@get:PathSensitive(PathSensitivity.RELATIVE)
49-
abstract val dackkaFiles: Property<File>
49+
abstract val dackkaFiles: RegularFileProperty
5050

51-
@get:OutputDirectory abstract val outputDirectory: Property<File>
51+
@get:OutputDirectory abstract val outputDirectory: RegularFileProperty
5252

5353
@TaskAction
5454
fun build() {
5555
val namesOfFilesWeDoNotNeed =
5656
listOf("index.html", "classes.html", "packages.html", "package-list")
57-
val rootDirectory = dackkaFiles.get()
58-
val targetDirectory = outputDirectory.get()
57+
val rootDirectory = dackkaFiles.get().asFile.childFile("docs/reference")
58+
val targetDirectory = outputDirectory.get().asFile
5959
targetDirectory.deleteRecursively()
6060

6161
rootDirectory.walkTopDown().forEach {

buildSrc/src/main/java/com/google/firebase/gradle/plugins/GitSubmodulePlugin.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ package com.google.firebase.gradle.plugins
1919
import java.io.File
2020
import org.gradle.api.Plugin
2121
import org.gradle.api.Project
22-
import org.gradle.api.provider.Property
22+
import org.gradle.api.file.RegularFileProperty
2323
import org.gradle.api.tasks.Exec
2424
import org.gradle.kotlin.dsl.create
2525
import org.gradle.kotlin.dsl.register
@@ -30,7 +30,7 @@ import org.gradle.kotlin.dsl.register
3030
* @param submodules the parent directory of the SDK's Git Submodules. Defaults to `src/third_party`
3131
*/
3232
interface GitSubmodulePluginExtension {
33-
val submodules: Property<File>
33+
val submodules: RegularFileProperty
3434
}
3535

3636
/**
@@ -56,15 +56,15 @@ abstract class GitSubmodulePlugin : Plugin<Project> {
5656

5757
override fun apply(project: Project) {
5858
with(configureExtension(project)) {
59-
registerInitializeGitSubmodulesTask(project, submodules.get())
60-
registerUpdateGitSubmodulesTask(project, submodules.get())
61-
registerRemoveGitSubmodulesTask(project, submodules.get())
59+
registerInitializeGitSubmodulesTask(project, submodules.get().asFile)
60+
registerUpdateGitSubmodulesTask(project, submodules.get().asFile)
61+
registerRemoveGitSubmodulesTask(project, submodules.get().asFile)
6262
}
6363
}
6464

6565
private fun configureExtension(project: Project) =
6666
project.extensions.create<GitSubmodulePluginExtension>("GitSubmodule").apply {
67-
submodules.convention(project.file("src/third_party"))
67+
submodules.convention(project.layout.projectDirectory.file("src/third_party"))
6868
}
6969

7070
/**

buildSrc/src/main/java/com/google/firebase/gradle/plugins/Metalava.kt

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ import java.io.OutputStream
2222
import org.gradle.api.DefaultTask
2323
import org.gradle.api.Project
2424
import org.gradle.api.artifacts.Configuration
25+
import org.gradle.api.file.ConfigurableFileCollection
2526
import org.gradle.api.file.FileCollection
27+
import org.gradle.api.file.RegularFileProperty
2628
import org.gradle.api.provider.Property
27-
import org.gradle.api.provider.SetProperty
2829
import org.gradle.api.tasks.Classpath
2930
import org.gradle.api.tasks.Input
3031
import org.gradle.api.tasks.InputFile
@@ -72,7 +73,7 @@ fun Project.runMetalavaWithArgs(
7273

7374
abstract class GenerateStubsTask : DefaultTask() {
7475
/** Source files against which API signatures will be validated. */
75-
@get:InputFiles abstract val sources: SetProperty<File>
76+
@get:InputFiles abstract val sources: ConfigurableFileCollection
7677

7778
@get:[InputFiles Classpath]
7879
lateinit var classPath: FileCollection
@@ -81,8 +82,7 @@ abstract class GenerateStubsTask : DefaultTask() {
8182

8283
@TaskAction
8384
fun run() {
84-
val sourcePath =
85-
sources.get().asSequence().filter { it.exists() }.map { it.absolutePath }.joinToString(":")
85+
val sourcePath = sources.files.filter { it.exists() }.map { it.absolutePath }.joinToString(":")
8686

8787
val classPath = classPath.files.asSequence().map { it.absolutePath }.toMutableList()
8888
project.androidJar?.let { classPath += listOf(it.absolutePath) }
@@ -103,20 +103,19 @@ abstract class GenerateStubsTask : DefaultTask() {
103103

104104
abstract class GenerateApiTxtTask : DefaultTask() {
105105
/** Source files against which API signatures will be validated. */
106-
@get:InputFiles abstract val sources: SetProperty<File>
106+
@get:InputFiles abstract val sources: ConfigurableFileCollection
107107

108108
@get:InputFiles lateinit var classPath: FileCollection
109109

110-
@get:OutputFile abstract val apiTxtFile: Property<File>
110+
@get:OutputFile abstract val apiTxtFile: RegularFileProperty
111111

112-
@get:OutputFile abstract val baselineFile: Property<File>
112+
@get:OutputFile abstract val baselineFile: RegularFileProperty
113113

114114
@get:Input abstract val updateBaseline: Property<Boolean>
115115

116116
@TaskAction
117117
fun run() {
118-
val sourcePath =
119-
sources.get().asSequence().filter { it.exists() }.map { it.absolutePath }.joinToString(":")
118+
val sourcePath = sources.files.filter { it.exists() }.map { it.absolutePath }.joinToString(":")
120119

121120
val classPath = classPath.files.asSequence().map { it.absolutePath }.toMutableList()
122121
project.androidJar?.let { classPath += listOf(it.absolutePath) }
@@ -128,11 +127,12 @@ abstract class GenerateApiTxtTask : DefaultTask() {
128127
"--classpath",
129128
classPath.joinToString(":"),
130129
"--api",
131-
apiTxtFile.get().absolutePath,
130+
apiTxtFile.get().asFile.absolutePath,
132131
"--format=v2",
133132
) +
134133
if (updateBaseline.get()) listOf("--update-baseline")
135-
else if (baselineFile.get().exists()) listOf("--baseline", baselineFile.get().absolutePath)
134+
else if (baselineFile.get().asFile.exists())
135+
listOf("--baseline", baselineFile.get().asFile.absolutePath)
136136
else listOf(),
137137
ignoreFailure = true,
138138
)
@@ -141,24 +141,23 @@ abstract class GenerateApiTxtTask : DefaultTask() {
141141

142142
abstract class ApiInformationTask : DefaultTask() {
143143
/** Source files against which API signatures will be validated. */
144-
@get:InputFiles abstract val sources: SetProperty<File>
144+
@get:InputFiles abstract val sources: ConfigurableFileCollection
145145

146146
@get:InputFiles lateinit var classPath: FileCollection
147147

148-
@get:InputFile abstract val apiTxtFile: Property<File>
148+
@get:InputFile abstract val apiTxtFile: RegularFileProperty
149149

150-
@get:OutputFile abstract val outputApiFile: Property<File>
150+
@get:OutputFile abstract val outputApiFile: RegularFileProperty
151151

152-
@get:OutputFile abstract val baselineFile: Property<File>
152+
@get:OutputFile abstract val baselineFile: RegularFileProperty
153153

154-
@get:OutputFile abstract val outputFile: Property<File>
154+
@get:OutputFile abstract val outputFile: RegularFileProperty
155155

156156
@get:Input abstract val updateBaseline: Property<Boolean>
157157

158158
@TaskAction
159159
fun run() {
160-
val sourcePath =
161-
sources.get().asSequence().filter { it.exists() }.map { it.absolutePath }.joinToString(":")
160+
val sourcePath = sources.files.filter { it.exists() }.map { it.absolutePath }.joinToString(":")
162161

163162
val classPath = classPath.files.asSequence().map { it.absolutePath }.toMutableList()
164163
project.androidJar?.let { classPath += listOf(it.absolutePath) }
@@ -170,7 +169,7 @@ abstract class ApiInformationTask : DefaultTask() {
170169
"--classpath",
171170
classPath.joinToString(":"),
172171
"--api",
173-
outputApiFile.get().absolutePath,
172+
outputApiFile.get().asFile.absolutePath,
174173
"--format=v2",
175174
),
176175
ignoreFailure = true,
@@ -179,9 +178,9 @@ abstract class ApiInformationTask : DefaultTask() {
179178
project.runMetalavaWithArgs(
180179
listOf(
181180
"--source-files",
182-
outputApiFile.get().absolutePath,
181+
outputApiFile.get().asFile.absolutePath,
183182
"--check-compatibility:api:released",
184-
apiTxtFile.get().absolutePath,
183+
apiTxtFile.get().asFile.absolutePath,
185184
"--error",
186185
"AddedClass",
187186
"--error",
@@ -192,10 +191,11 @@ abstract class ApiInformationTask : DefaultTask() {
192191
"--no-color",
193192
) +
194193
if (updateBaseline.get()) listOf("--update-baseline")
195-
else if (baselineFile.get().exists()) listOf("--baseline", baselineFile.get().absolutePath)
194+
else if (baselineFile.get().asFile.exists())
195+
listOf("--baseline", baselineFile.get().asFile.absolutePath)
196196
else listOf(),
197197
ignoreFailure = true,
198-
stdOut = FileOutputStream(outputFile.get()),
198+
stdOut = FileOutputStream(outputFile.get().asFile),
199199
)
200200
}
201201
}

0 commit comments

Comments
 (0)