Skip to content

Commit 5d2a3d4

Browse files
committed
Refactor StringCarePlugin and related extensions for improved configuration handling: replace direct configuration access with effective methods, enhance variant obfuscation task registration, and streamline project path retrieval.
1 parent 1a3d213 commit 5d2a3d4

File tree

4 files changed

+50
-48
lines changed

4 files changed

+50
-48
lines changed

plugin/src/main/kotlin/dev/vyp/stringcare/plugin/StringCarePlugin.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,11 @@ class StringCarePlugin : Plugin<Project> {
3030
val buildService = registerStringCareService(target)
3131

3232
target.plugins.withId("com.android.application") {
33-
val config = target.config(extension)
34-
buildService.get().setResolvedConfiguration(config)
35-
target.registerVariantObfuscationTasks(config, buildService)
33+
val bookkeeping = target.config(extension)
34+
buildService.get().setResolvedConfiguration(bookkeeping)
35+
target.registerVariantObfuscationTasks(bookkeeping, extension, buildService)
3636
target.afterEvaluate {
37+
buildService.get().setResolvedConfiguration(target.config(extension))
3738
val resolved = buildService.get().getResolvedConfiguration()
3839
if (resolved.debug) {
3940
PrintUtils.print("PATH", buildService.get().absoluteProjectPath())

plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/Extensions.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,15 +121,15 @@ fun File.validForXMLConfiguration(configuration: StringCareConfiguration): Boole
121121
excludedForXML().not()
122122
if (valid) {
123123
valid = false
124-
configuration.srcFolders.forEach { folder ->
124+
configuration.effectiveSrcFolders().forEach { folder ->
125125
if (pathContains(this.absolutePath, folder)) {
126126
valid = true
127127
}
128128
}
129129
}
130130
if (valid) {
131131
valid = false
132-
configuration.stringFiles.forEach { file ->
132+
configuration.effectiveStringFiles().forEach { file ->
133133
if (pathEndsWith(this.absolutePath, file)) {
134134
valid = true
135135
}
@@ -194,15 +194,15 @@ fun File.resourceFile(configuration: StringCareConfiguration): ResourceFile? {
194194
var sourceFolder = ""
195195
var validFile: File? = null
196196
var valid = false
197-
configuration.srcFolders.forEach { folder ->
197+
configuration.effectiveSrcFolders().forEach { folder ->
198198
if (pathContains(this.absolutePath, folder)) {
199199
sourceFolder = folder
200200
valid = true
201201
}
202202
}
203203
if (valid) {
204204
valid = false
205-
configuration.stringFiles.forEach { file ->
205+
configuration.effectiveStringFiles().forEach { file ->
206206
if (pathEndsWith(this.absolutePath, file)) {
207207
valid = true
208208
validFile = this
@@ -217,7 +217,7 @@ fun File.assetsFile(configuration: StringCareConfiguration): AssetsFile? {
217217
var sourceFolder = ""
218218
var validFile: File? = null
219219
var valid = false
220-
configuration.srcFolders.forEach { folder ->
220+
configuration.effectiveSrcFolders().forEach { folder ->
221221
if (pathContains(this.absolutePath, folder)) {
222222
sourceFolder = folder
223223
valid = true
@@ -334,3 +334,10 @@ fun StringCareConfiguration.normalize(): StringCareConfiguration {
334334
srcFolders.addAll(nextSrc)
335335
return this
336336
}
337+
338+
/** Defaults must match [locateConfiguredFiles] / Variant task includes when lists were not merged from DSL yet. */
339+
internal fun StringCareConfiguration.effectiveSrcFolders(): List<String> =
340+
srcFolders.takeIf { it.isNotEmpty() } ?: listOf("src/main")
341+
342+
internal fun StringCareConfiguration.effectiveStringFiles(): List<String> =
343+
stringFiles.takeIf { it.isNotEmpty() } ?: listOf("strings.xml")

plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/ProjectExtensions.kt

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,8 @@ import org.gradle.api.Task
1414
import org.gradle.api.provider.Provider
1515
import java.io.File
1616

17-
fun Project.absolutePath(): String {
18-
val fPath =
19-
this.file("build.gradle").absolutePath.replace(
20-
"build.gradle",
21-
emptyChar,
22-
)
23-
val pathComponents = fPath.split(File.separator)
24-
return fPath.replace(pathComponents[pathComponents.size - 2] + File.separator, "")
25-
}
17+
/** Root directory of this Gradle project (the module applying the plugin). */
18+
fun Project.absolutePath(): String = projectDir.absolutePath
2619

2720
fun Project.module(): String {
2821
val fPath =

plugin/src/main/kotlin/dev/vyp/stringcare/plugin/internal/VariantApi.kt

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package dev.vyp.stringcare.plugin.internal
22

33
import com.android.build.api.variant.ApplicationAndroidComponentsExtension
44
import dev.vyp.stringcare.plugin.StringCareConfiguration
5+
import dev.vyp.stringcare.plugin.StringCareExtension
56
import dev.vyp.stringcare.plugin.services.StringCareBuildService
67
import dev.vyp.stringcare.plugin.tasks.ObfuscateAssetsTask
78
import dev.vyp.stringcare.plugin.tasks.ObfuscateStringsTask
@@ -16,23 +17,21 @@ import org.gradle.api.tasks.TaskCollection
1617
private fun String.variantTaskSuffix(): String = replaceFirstChar { it.uppercase() }
1718

1819
fun Project.registerVariantObfuscationTasks(
19-
config: StringCareConfiguration,
20+
bookkeeping: StringCareConfiguration,
21+
extension: StringCareExtension,
2022
buildService: Provider<StringCareBuildService>,
2123
) {
2224
val androidComponents =
2325
extensions.findByType(ApplicationAndroidComponentsExtension::class.java)
2426
?: return
2527

2628
val absoluteProjectPath = buildService.get().absoluteProjectPath()
27-
val moduleNameValue = config.name
28-
val srcJson = toJsonStringList(config.srcFolders)
29-
val strJson = toJsonStringList(config.stringFiles)
30-
val assetsJson = toJsonStringList(config.assetsFiles)
29+
val moduleNameValue = bookkeeping.name
3130
androidComponents.onVariants(androidComponents.selector().all()) { variant ->
3231
val variantName: String = variant.name
3332
val applicationId = variant.applicationId.get()
3433
buildService.get().putVariantApplicationId(variantName, applicationId)
35-
if (config.applicationId.isEmpty()) config.applicationId = applicationId
34+
if (bookkeeping.applicationId.isEmpty()) bookkeeping.applicationId = applicationId
3635
val variantCapitalized = variantName.variantTaskSuffix()
3736

3837
tasks.register(
@@ -45,24 +44,26 @@ fun Project.registerVariantObfuscationTasks(
4544
t.moduleName.set(moduleNameValue)
4645
t.variantName.set(variantName)
4746
t.applicationId.set(applicationId)
48-
t.skip.set(config.skip)
49-
t.debug.set(config.debug)
50-
t.mockedFingerprint.set(config.mockedFingerprint)
51-
t.srcFoldersJson.set(srcJson)
52-
t.stringFilesJson.set(strJson)
53-
t.assetsFilesJson.set(assetsJson)
54-
val includes =
55-
config.srcFolders
56-
.ifEmpty { listOf("src/main/res") }
57-
.flatMap { src ->
58-
config.stringFiles
59-
.ifEmpty { listOf("strings.xml") }
60-
.map { name -> "$src/**/$name" }
61-
}
47+
t.skip.set(provider { extension.skip })
48+
t.debug.set(provider { extension.debug })
49+
t.mockedFingerprint.set(provider { extension.mockedFingerprint })
50+
t.srcFoldersJson.set(provider { toJsonStringList(extension.srcFolders) })
51+
t.stringFilesJson.set(provider { toJsonStringList(extension.stringFiles) })
52+
t.assetsFilesJson.set(provider { toJsonStringList(extension.assetsFiles) })
6253
t.xmlInputFiles.from(
63-
fileTree(absoluteProjectPath).matching { pattern ->
64-
pattern.include(includes)
65-
pattern.exclude("**/build/**", "**/.git/**", "**/.gradle/**", "**/node_modules/**")
54+
provider {
55+
val includes =
56+
extension.srcFolders
57+
.ifEmpty { listOf("src/main/res") }
58+
.flatMap { src ->
59+
extension.stringFiles
60+
.ifEmpty { listOf("strings.xml") }
61+
.map { name -> "$src/**/$name" }
62+
}
63+
fileTree(absoluteProjectPath).matching { pattern ->
64+
includes.forEach { pattern.include(it) }
65+
pattern.exclude("**/build/**", "**/.git/**", "**/.gradle/**", "**/node_modules/**")
66+
}
6667
},
6768
)
6869
t.outputDirectory.set(layout.buildDirectory.dir("stringcare/obfuscate-strings/$variantName"))
@@ -75,7 +76,7 @@ fun Project.registerVariantObfuscationTasks(
7576
t.stringCareService.set(buildService)
7677
t.projectPath.set(absoluteProjectPath)
7778
t.moduleName.set(moduleNameValue)
78-
t.skip.set(config.skip)
79+
t.skip.set(provider { extension.skip })
7980
}
8081

8182
tasks.register(
@@ -88,12 +89,12 @@ fun Project.registerVariantObfuscationTasks(
8889
t.moduleName.set(moduleNameValue)
8990
t.variantName.set(variantName)
9091
t.applicationId.set(applicationId)
91-
t.skip.set(config.skip)
92-
t.debug.set(config.debug)
93-
t.mockedFingerprint.set(config.mockedFingerprint)
94-
t.srcFoldersJson.set(srcJson)
95-
t.stringFilesJson.set(strJson)
96-
t.assetsFilesJson.set(assetsJson)
92+
t.skip.set(provider { extension.skip })
93+
t.debug.set(provider { extension.debug })
94+
t.mockedFingerprint.set(provider { extension.mockedFingerprint })
95+
t.srcFoldersJson.set(provider { toJsonStringList(extension.srcFolders) })
96+
t.stringFilesJson.set(provider { toJsonStringList(extension.stringFiles) })
97+
t.assetsFilesJson.set(provider { toJsonStringList(extension.assetsFiles) })
9798
}
9899
tasks.register(
99100
"stringcareAfterMergeAssets$variantCapitalized",
@@ -103,7 +104,7 @@ fun Project.registerVariantObfuscationTasks(
103104
t.stringCareService.set(buildService)
104105
t.projectPath.set(absoluteProjectPath)
105106
t.moduleName.set(moduleNameValue)
106-
t.skip.set(config.skip)
107+
t.skip.set(provider { extension.skip })
107108
}
108109

109110
val mergeRes =

0 commit comments

Comments
 (0)