Skip to content

Commit 139902e

Browse files
author
plamen5kov
committed
fixed bug with invalid characters in flavor dimension when provided by user
1 parent 3274e73 commit 139902e

1 file changed

Lines changed: 30 additions & 7 deletions

File tree

build/project-template-gradle/build.gradle

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -173,38 +173,62 @@ dependencies {
173173
///////////////////////////// CONFIGURATION PHASE //////////////////////////////////
174174
////////////////////////////////////////////////////////////////////////////////////
175175

176-
def createIncludeFile (filePath, fileName) {
176+
def createIncludeFile (filePath, fileName, dimensionName) {
177177
println "\t+creating include.gradle file for: " + filePath
178178
def defaultIncludeFile = new File(filePath, "include.gradle")
179179
defaultIncludeFile.write ""
180180
defaultIncludeFile << "android { \n"
181181
defaultIncludeFile << "\tproductFlavors {\n"
182182
defaultIncludeFile << '\t\t"' + fileName + '" {\n'
183-
defaultIncludeFile << '\t\t\tdimension "' + fileName + '"\n'
183+
defaultIncludeFile << '\t\t\tdimension "' + dimensionName + '"\n'
184184
defaultIncludeFile << "\t\t}\n"
185185
defaultIncludeFile << "\t}\n"
186186
defaultIncludeFile << "}"
187187
}
188188

189+
def sanatizeDimensionName(str) {
190+
return str.replaceAll(/[\W]/, "")
191+
}
192+
193+
//make sure the include.gradle file, produced by the user, has only allowed characters in dimension attribute and remove any invalid characters if necessary
194+
def updateIncludeGradleFile(subFile, dimensionName) {
195+
def igFile = new File(subFile.getAbsolutePath())
196+
def newContent = igFile.text.replaceAll(/dimension\s["|'](.+)["|'']/) { fullMatch, fDimension ->
197+
def newFg = sanatizeDimensionName(fDimension)
198+
dimensionName = newFg
199+
return "dimension \"$newFg\""
200+
}
201+
igFile.text = newContent
202+
203+
return dimensionName
204+
}
205+
189206
task createDefaultIncludeFiles {
190-
description "creates default include.gradle files for added plugins if necessary"
207+
description "creates default include.gradle files for added plugins IF NECESSARY"
191208
println "$configStage createDefaultIncludeFiles"
192209
def ft = file(configurationsDir)
193210

194211
ft.listFiles().each { fl ->
212+
195213
if(fl.isDirectory()) {
214+
def fileName = fl.name
215+
def dimensionName = sanatizeDimensionName(fileName)
196216
createPluginConfigFile = true
197-
pluginNames.add('"' + fl.name + '"')
198-
199217
def foundIncludeFile = false
218+
219+
println "\t+found plugins: " + fileName
200220
fl.listFiles().each { subFile ->
221+
201222
if(subFile.name == "include.gradle") {
202223
foundIncludeFile = true
224+
dimensionName = updateIncludeGradleFile(subFile, dimensionName)
203225
}
204226
}
205227

228+
pluginNames.add('"' + dimensionName + '"')
229+
206230
if(!foundIncludeFile) {
207-
createIncludeFile(fl.getAbsolutePath() ,fl.name)
231+
createIncludeFile(fl.getAbsolutePath() ,fileName, dimensionName)
208232
}
209233
}
210234
}
@@ -222,7 +246,6 @@ task createPluginsConfigFile {
222246
if(createPluginConfigFile) {
223247
println "\t+creating product flavors include.gradle file in $configurationsDir folder..."
224248
def flavors = pluginNames.join(",")
225-
println "\t+found plugins: " + flavors
226249
flavorsFile << "android { \n"
227250
flavorsFile << "\tflavorDimensions " + flavors + "\n"
228251
flavorsFile << "}\n"

0 commit comments

Comments
 (0)