Skip to content

Commit 1d99f0e

Browse files
committed
#582 remove code duplication from generator
1 parent 1d99309 commit 1d99f0e

21 files changed

+106
-739
lines changed

resources-generator/src/main/kotlin/dev/icerock/gradle/generator/CodeGenerators.kt

Lines changed: 12 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import com.squareup.kotlinpoet.TypeSpec
1717
import dev.icerock.gradle.generator.Constants.Apple
1818
import dev.icerock.gradle.generator.Constants.Jvm
1919
import dev.icerock.gradle.generator.Constants.PlatformDetails
20+
import dev.icerock.gradle.generator.platform.js.JsFilePathMode
2021
import dev.icerock.gradle.metadata.resource.HierarchyMetadata
2122
import dev.icerock.gradle.metadata.resource.ResourceMetadata
2223
import org.gradle.api.GradleException
@@ -151,8 +152,8 @@ internal fun <T : ResourceMetadata> TypeSpec.Builder.addValuesFunction(
151152

152153
hierarchyMetadata.joinToString { meta ->
153154
meta.path.joinToString(separator = ".") +
154-
(".".takeIf { meta.path.isNotEmpty() } ?: "") +
155-
meta.key
155+
(".".takeIf { meta.path.isNotEmpty() } ?: "") +
156+
meta.key
156157
}
157158
} else {
158159
// Create simple resource key
@@ -200,13 +201,16 @@ internal fun TypeSpec.Builder.addOverrideAbstractValuesFunction(
200201
return addFunction(valuesFun)
201202
}
202203

203-
internal fun TypeSpec.Builder.addJsFallbackProperty(fallbackFilePath: String) {
204+
internal fun TypeSpec.Builder.addJsFallbackProperty(
205+
fallbackFilePath: String,
206+
filePathMode: JsFilePathMode
207+
) {
204208
val property: PropertySpec = PropertySpec
205209
.builder(Constants.Js.fallbackFilePropertyName, String::class, KModifier.PRIVATE)
206210
.initializer(
207211
CodeBlock.of(
208-
"js(%S) as %T",
209-
"require(\"$fallbackFilePath\")",
212+
"${filePathMode.format} as %T",
213+
filePathMode.argument(fallbackFilePath),
210214
String::class
211215
)
212216
)
@@ -215,21 +219,9 @@ internal fun TypeSpec.Builder.addJsFallbackProperty(fallbackFilePath: String) {
215219
addProperty(property)
216220
}
217221

218-
internal fun TypeSpec.Builder.addWasmJsFallbackProperty(fallbackFilePath: String) {
219-
val property: PropertySpec = PropertySpec
220-
.builder(Constants.WasmJs.fallbackFilePropertyName, String::class, KModifier.PRIVATE)
221-
.initializer(
222-
CodeBlock.of(
223-
"\"$fallbackFilePath\""
224-
)
225-
)
226-
.build()
227-
228-
addProperty(property)
229-
}
230-
231222
internal fun TypeSpec.Builder.addJsSupportedLocalesProperty(
232223
bcpLangToPath: List<Pair<String, String>>,
224+
filePathMode: JsFilePathMode
233225
) {
234226
val property: PropertySpec = PropertySpec
235227
.builder(
@@ -243,10 +235,10 @@ internal fun TypeSpec.Builder.addJsSupportedLocalesProperty(
243235
add("%T(listOf(\n", Constants.Js.supportedLocalesName)
244236
bcpLangToPath.forEach { (bcpLang, filePath) ->
245237
add(
246-
"%T(%S, js(%S) as %T),\n",
238+
"%T(%S, ${filePathMode.format} as %T),\n",
247239
Constants.Js.supportedLocaleName,
248240
bcpLang,
249-
"require(\"$filePath\")",
241+
filePathMode.argument(filePath),
250242
String::class
251243
)
252244
}
@@ -257,34 +249,6 @@ internal fun TypeSpec.Builder.addJsSupportedLocalesProperty(
257249
addProperty(property)
258250
}
259251

260-
internal fun TypeSpec.Builder.addWasmJsSupportedLocalesProperty(
261-
bcpLangToPath: List<Pair<String, String>>,
262-
) {
263-
val property: PropertySpec = PropertySpec
264-
.builder(
265-
Constants.WasmJs.supportedLocalesPropertyName,
266-
Constants.WasmJs.supportedLocalesName,
267-
KModifier.PRIVATE
268-
).initializer(
269-
CodeBlock
270-
.builder()
271-
.apply {
272-
add("%T(listOf(\n", Constants.WasmJs.supportedLocalesName)
273-
bcpLangToPath.forEach { (bcpLang, filePath) ->
274-
add(
275-
"%T(%S, %S),\n",
276-
Constants.WasmJs.supportedLocaleName,
277-
bcpLang,
278-
filePath
279-
)
280-
}
281-
add("))")
282-
}.build()
283-
).build()
284-
285-
addProperty(property)
286-
}
287-
288252
internal fun TypeSpec.Builder.addJsContainerStringsLoaderProperty() {
289253
val property = PropertySpec.builder(
290254
Constants.Js.stringsLoaderPropertyName,
@@ -299,18 +263,3 @@ internal fun TypeSpec.Builder.addJsContainerStringsLoaderProperty() {
299263
).build()
300264
addProperty(property)
301265
}
302-
303-
internal fun TypeSpec.Builder.addWasmJsContainerStringsLoaderProperty() {
304-
val property = PropertySpec.builder(
305-
Constants.WasmJs.stringsLoaderPropertyName,
306-
Constants.WasmJs.stringLoaderName,
307-
KModifier.OVERRIDE
308-
).initializer(
309-
CodeBlock.of(
310-
"${Constants.WasmJs.remoteStringLoaderClassName}.Impl(supportedLocales = %N, fallbackFileUri = %N)",
311-
Constants.WasmJs.supportedLocalesPropertyName,
312-
Constants.WasmJs.fallbackFilePropertyName
313-
)
314-
).build()
315-
addProperty(property)
316-
}

resources-generator/src/main/kotlin/dev/icerock/gradle/generator/Constants.kt

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -56,19 +56,4 @@ internal object Constants {
5656
const val fallbackFilePropertyName = "fallbackFileUrl"
5757
const val supportedLocalesPropertyName = "supportedLocales"
5858
}
59-
60-
object WasmJs {
61-
private const val internalPackage = "dev.icerock.moko.resources.internal"
62-
val supportedLocalesName = ClassName(internalPackage, "SupportedLocales")
63-
val supportedLocaleName = ClassName(internalPackage, "SupportedLocale")
64-
65-
const val remoteStringLoaderClassName = "RemoteJsStringLoader"
66-
val loaderHolderName = ClassName(internalPackage, "${remoteStringLoaderClassName}Holder")
67-
val stringLoaderName =
68-
ClassName("dev.icerock.moko.resources.provider", remoteStringLoaderClassName)
69-
const val stringsLoaderPropertyName = "stringsLoader"
70-
71-
const val fallbackFilePropertyName = "fallbackFileUrl"
72-
const val supportedLocalesPropertyName = "supportedLocales"
73-
}
7459
}

resources-generator/src/main/kotlin/dev/icerock/gradle/generator/factory/AssetGeneratorFactory.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ import dev.icerock.gradle.generator.Constants
99
import dev.icerock.gradle.generator.HierarchyPropertiesGenerationStrategy
1010
import dev.icerock.gradle.generator.PlatformResourceGenerator
1111
import dev.icerock.gradle.generator.ResourceTypeGenerator
12+
import dev.icerock.gradle.generator.platform.js.JsFilePathMode
1213
import dev.icerock.gradle.generator.resources.NOPResourceGenerator
1314
import dev.icerock.gradle.generator.resources.asset.AndroidAssetResourceGenerator
1415
import dev.icerock.gradle.generator.resources.asset.AppleAssetResourceGenerator
1516
import dev.icerock.gradle.generator.resources.asset.AssetResourceGenerator
1617
import dev.icerock.gradle.generator.resources.asset.JsAssetResourceGenerator
1718
import dev.icerock.gradle.generator.resources.asset.JvmAssetResourceGenerator
18-
import dev.icerock.gradle.generator.resources.asset.WasmJsAssetResourceGenerator
1919
import dev.icerock.gradle.metadata.container.ResourceType
2020
import dev.icerock.gradle.metadata.resource.AssetMetadata
2121
import dev.icerock.gradle.toModifier
@@ -79,12 +79,14 @@ internal class AssetGeneratorFactory(
7979
},
8080
createJs = {
8181
JsAssetResourceGenerator(
82-
resourcesGenerationDir = outputResourcesDir
82+
resourcesGenerationDir = outputResourcesDir,
83+
filePathMode = JsFilePathMode.require
8384
)
8485
},
8586
createWasm = {
86-
WasmJsAssetResourceGenerator(
87-
resourcesGenerationDir = outputResourcesDir
87+
JsAssetResourceGenerator(
88+
resourcesGenerationDir = outputResourcesDir,
89+
filePathMode = JsFilePathMode.rawPath
8890
)
8991
}
9092
)

resources-generator/src/main/kotlin/dev/icerock/gradle/generator/factory/FileGeneratorFactory.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ import dev.icerock.gradle.generator.Constants
99
import dev.icerock.gradle.generator.HierarchyPropertiesGenerationStrategy
1010
import dev.icerock.gradle.generator.PlatformResourceGenerator
1111
import dev.icerock.gradle.generator.ResourceTypeGenerator
12+
import dev.icerock.gradle.generator.platform.js.JsFilePathMode
1213
import dev.icerock.gradle.generator.resources.NOPResourceGenerator
1314
import dev.icerock.gradle.generator.resources.file.AndroidFileResourceGenerator
1415
import dev.icerock.gradle.generator.resources.file.AppleFileResourceGenerator
1516
import dev.icerock.gradle.generator.resources.file.FileResourceGenerator
1617
import dev.icerock.gradle.generator.resources.file.JsFileResourceGenerator
1718
import dev.icerock.gradle.generator.resources.file.JvmFileResourceGenerator
18-
import dev.icerock.gradle.generator.resources.file.WasmJsFileResourceGenerator
1919
import dev.icerock.gradle.metadata.container.ResourceType
2020
import dev.icerock.gradle.metadata.resource.FileMetadata
2121
import dev.icerock.gradle.toModifier
@@ -78,12 +78,14 @@ internal class FileGeneratorFactory(
7878
},
7979
createJs = {
8080
JsFileResourceGenerator(
81-
resourcesGenerationDir = outputResourcesDir
81+
resourcesGenerationDir = outputResourcesDir,
82+
filePathMode = JsFilePathMode.require
8283
)
8384
},
8485
createWasm = {
85-
WasmJsFileResourceGenerator(
86-
resourcesGenerationDir = outputResourcesDir
86+
JsFileResourceGenerator(
87+
resourcesGenerationDir = outputResourcesDir,
88+
filePathMode = JsFilePathMode.rawPath
8789
)
8890
}
8991
)

resources-generator/src/main/kotlin/dev/icerock/gradle/generator/factory/FontGeneratorFactory.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ import dev.icerock.gradle.generator.Constants
99
import dev.icerock.gradle.generator.FlatPropertiesGenerationStrategy
1010
import dev.icerock.gradle.generator.PlatformResourceGenerator
1111
import dev.icerock.gradle.generator.ResourceTypeGenerator
12+
import dev.icerock.gradle.generator.platform.js.JsFilePathMode
1213
import dev.icerock.gradle.generator.resources.NOPResourceGenerator
1314
import dev.icerock.gradle.generator.resources.font.AndroidFontResourceGenerator
1415
import dev.icerock.gradle.generator.resources.font.AppleFontResourceGenerator
1516
import dev.icerock.gradle.generator.resources.font.FontResourceGenerator
1617
import dev.icerock.gradle.generator.resources.font.JsFontResourceGenerator
1718
import dev.icerock.gradle.generator.resources.font.JvmFontResourceGenerator
18-
import dev.icerock.gradle.generator.resources.font.WasmJsFontResourceGenerator
1919
import dev.icerock.gradle.metadata.container.ResourceType
2020
import dev.icerock.gradle.metadata.resource.FontMetadata
2121
import dev.icerock.gradle.toModifier
@@ -71,13 +71,15 @@ internal class FontGeneratorFactory(
7171
createJs = {
7272
JsFontResourceGenerator(
7373
resourcesPackageName = resourcesPackageName,
74-
resourcesGenerationDir = outputResourcesDir
74+
resourcesGenerationDir = outputResourcesDir,
75+
filePathMode = JsFilePathMode.require
7576
)
7677
},
7778
createWasm = {
78-
WasmJsFontResourceGenerator(
79+
JsFontResourceGenerator(
7980
resourcesPackageName = resourcesPackageName,
80-
resourcesGenerationDir = outputResourcesDir
81+
resourcesGenerationDir = outputResourcesDir,
82+
filePathMode = JsFilePathMode.rawPath
8183
)
8284
}
8385
)

resources-generator/src/main/kotlin/dev/icerock/gradle/generator/factory/ImageGeneratorFactory.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ import dev.icerock.gradle.generator.Constants
99
import dev.icerock.gradle.generator.FlatPropertiesGenerationStrategy
1010
import dev.icerock.gradle.generator.PlatformResourceGenerator
1111
import dev.icerock.gradle.generator.ResourceTypeGenerator
12+
import dev.icerock.gradle.generator.platform.js.JsFilePathMode
1213
import dev.icerock.gradle.generator.resources.NOPResourceGenerator
1314
import dev.icerock.gradle.generator.resources.image.AndroidImageResourceGenerator
1415
import dev.icerock.gradle.generator.resources.image.AppleImageResourceGenerator
1516
import dev.icerock.gradle.generator.resources.image.ImageResourceGenerator
1617
import dev.icerock.gradle.generator.resources.image.JsImageResourceGenerator
1718
import dev.icerock.gradle.generator.resources.image.JvmImageResourceGenerator
18-
import dev.icerock.gradle.generator.resources.image.WasmJsImageResourceGenerator
1919
import dev.icerock.gradle.metadata.container.ResourceType
2020
import dev.icerock.gradle.metadata.resource.ImageMetadata
2121
import dev.icerock.gradle.toModifier
@@ -75,12 +75,14 @@ internal class ImageGeneratorFactory(
7575
},
7676
createJs = {
7777
JsImageResourceGenerator(
78-
resourcesGenerationDir = outputResourcesDir
78+
resourcesGenerationDir = outputResourcesDir,
79+
filePathMode = JsFilePathMode.require
7980
)
8081
},
8182
createWasm = {
82-
WasmJsImageResourceGenerator(
83-
resourcesGenerationDir = outputResourcesDir
83+
JsImageResourceGenerator(
84+
resourcesGenerationDir = outputResourcesDir,
85+
filePathMode = JsFilePathMode.rawPath
8486
)
8587
}
8688
)

resources-generator/src/main/kotlin/dev/icerock/gradle/generator/factory/PluralGeneratorFactory.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ import dev.icerock.gradle.generator.Constants
99
import dev.icerock.gradle.generator.FlatPropertiesGenerationStrategy
1010
import dev.icerock.gradle.generator.PlatformResourceGenerator
1111
import dev.icerock.gradle.generator.ResourceTypeGenerator
12+
import dev.icerock.gradle.generator.platform.js.JsFilePathMode
1213
import dev.icerock.gradle.generator.resources.NOPResourceGenerator
1314
import dev.icerock.gradle.generator.resources.plural.AndroidPluralResourceGenerator
1415
import dev.icerock.gradle.generator.resources.plural.ApplePluralResourceGenerator
1516
import dev.icerock.gradle.generator.resources.plural.JsPluralResourceGenerator
1617
import dev.icerock.gradle.generator.resources.plural.JvmPluralResourceGenerator
1718
import dev.icerock.gradle.generator.resources.plural.PluralResourceGenerator
18-
import dev.icerock.gradle.generator.resources.plural.WasmJsPluralResourceGenerator
1919
import dev.icerock.gradle.metadata.container.ResourceType
2020
import dev.icerock.gradle.metadata.resource.PluralMetadata
2121
import dev.icerock.gradle.toModifier
@@ -78,13 +78,15 @@ internal class PluralGeneratorFactory(
7878
createJs = {
7979
JsPluralResourceGenerator(
8080
resourcesPackageName = resourcesPackageName,
81-
resourcesGenerationDir = outputResourcesDir
81+
resourcesGenerationDir = outputResourcesDir,
82+
filePathMode = JsFilePathMode.require
8283
)
8384
},
8485
createWasm = {
85-
WasmJsPluralResourceGenerator(
86+
JsPluralResourceGenerator(
8687
resourcesPackageName = resourcesPackageName,
87-
resourcesGenerationDir = outputResourcesDir
88+
resourcesGenerationDir = outputResourcesDir,
89+
filePathMode = JsFilePathMode.rawPath
8890
)
8991
}
9092
)

resources-generator/src/main/kotlin/dev/icerock/gradle/generator/factory/StringGeneratorFactory.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ import dev.icerock.gradle.generator.Constants
99
import dev.icerock.gradle.generator.FlatPropertiesGenerationStrategy
1010
import dev.icerock.gradle.generator.PlatformResourceGenerator
1111
import dev.icerock.gradle.generator.ResourceTypeGenerator
12+
import dev.icerock.gradle.generator.platform.js.JsFilePathMode
1213
import dev.icerock.gradle.generator.resources.NOPResourceGenerator
1314
import dev.icerock.gradle.generator.resources.string.AndroidStringResourceGenerator
1415
import dev.icerock.gradle.generator.resources.string.AppleStringResourceGenerator
1516
import dev.icerock.gradle.generator.resources.string.JsStringResourceGenerator
1617
import dev.icerock.gradle.generator.resources.string.JvmStringResourceGenerator
1718
import dev.icerock.gradle.generator.resources.string.StringResourceGenerator
18-
import dev.icerock.gradle.generator.resources.string.WasmJsStringResourceGenerator
1919
import dev.icerock.gradle.metadata.container.ResourceType
2020
import dev.icerock.gradle.metadata.resource.StringMetadata
2121
import dev.icerock.gradle.toModifier
@@ -78,13 +78,15 @@ internal class StringGeneratorFactory(
7878
createJs = {
7979
JsStringResourceGenerator(
8080
resourcesPackageName = resourcesPackageName,
81-
resourcesGenerationDir = outputResourcesDir
81+
resourcesGenerationDir = outputResourcesDir,
82+
filePathMode = JsFilePathMode.require
8283
)
8384
},
8485
createWasm = {
85-
WasmJsStringResourceGenerator(
86+
JsStringResourceGenerator(
8687
resourcesPackageName = resourcesPackageName,
87-
resourcesGenerationDir = outputResourcesDir
88+
resourcesGenerationDir = outputResourcesDir,
89+
filePathMode = JsFilePathMode.rawPath
8890
)
8991
}
9092
)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package dev.icerock.gradle.generator.platform.js
2+
3+
internal data class JsFilePathMode(
4+
val format: String,
5+
val argument: (String) -> String,
6+
) {
7+
companion object {
8+
val require = JsFilePathMode(
9+
format = "js(%S)",
10+
argument = { """require("$it")""" }
11+
)
12+
val rawPath = JsFilePathMode(
13+
format = "%S",
14+
argument = { it }
15+
)
16+
}
17+
}

resources-generator/src/main/kotlin/dev/icerock/gradle/generator/resources/asset/JsAssetResourceGenerator.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ import dev.icerock.gradle.generator.Constants
1212
import dev.icerock.gradle.generator.PlatformResourceGenerator
1313
import dev.icerock.gradle.generator.addEmptyPlatformResourceProperty
1414
import dev.icerock.gradle.generator.addValuesFunction
15+
import dev.icerock.gradle.generator.platform.js.JsFilePathMode
1516
import dev.icerock.gradle.metadata.resource.AssetMetadata
1617
import java.io.File
1718

1819
internal class JsAssetResourceGenerator(
1920
private val resourcesGenerationDir: File,
21+
private val filePathMode: JsFilePathMode
2022
) : PlatformResourceGenerator<AssetMetadata> {
2123

2224
override fun imports(): List<ClassName> = emptyList()
@@ -25,10 +27,10 @@ internal class JsAssetResourceGenerator(
2527
val filePath: String = File(ASSETS_DIR, metadata.pathRelativeToBase.path)
2628
.invariantSeparatorsPath
2729

28-
val requireDeclaration = """require("./$filePath")"""
30+
val originalPath: String = filePathMode.argument("./$filePath")
2931
return CodeBlock.of(
30-
"AssetResource(originalPath = js(%S) as String, rawPath = %S)",
31-
requireDeclaration,
32+
"AssetResource(originalPath = ${filePathMode.format} as String, rawPath = %S)",
33+
originalPath,
3234
metadata.pathRelativeToBase.invariantSeparatorsPath
3335
)
3436
}

0 commit comments

Comments
 (0)