55package dev.icerock.gradle
66
77import com.android.build.gradle.LibraryExtension
8- import dev.icerock.gradle.generator.AndroidMRGenerator
9- import dev.icerock.gradle.generator.CommonMRGenerator
10- import dev.icerock.gradle.generator.IosMRGenerator
11- import dev.icerock.gradle.generator.MRGenerator
12- import dev.icerock.gradle.generator.image.AndroidImagesGenerator
13- import dev.icerock.gradle.generator.image.CommonImagesGenerator
14- import dev.icerock.gradle.generator.image.IosImagesGenerator
15- import dev.icerock.gradle.generator.plurals.AndroidPluralsGenerator
16- import dev.icerock.gradle.generator.plurals.CommonPluralsGenerator
17- import dev.icerock.gradle.generator.plurals.IosPluralsGenerator
18- import dev.icerock.gradle.generator.strings.AndroidStringsGenerator
19- import dev.icerock.gradle.generator.strings.CommonStringsGenerator
20- import dev.icerock.gradle.generator.strings.IosStringsGenerator
8+ import dev.icerock.gradle.generator.*
9+ import dev.icerock.gradle.generator.fonts.FontsGeneratorFeature
10+ import dev.icerock.gradle.generator.image.ImagesGeneratorFeature
11+ import dev.icerock.gradle.generator.plurals.PluralsGeneratorFeature
12+ import dev.icerock.gradle.generator.strings.StringsGeneratorFeature
2113import org.gradle.api.Plugin
2214import org.gradle.api.Project
2315import org.gradle.api.file.FileTree
@@ -57,16 +49,6 @@ class MultiplatformResourcesPlugin : Plugin<Project> {
5749 sourceSets.getByName(KotlinSourceSet .COMMON_MAIN_SOURCE_SET_NAME )
5850 val commonResources = commonSourceSet.resources
5951
60- val strings = commonResources.matching {
61- include(" MR/**/strings.xml" )
62- }
63- val plurals = commonResources.matching {
64- include(" MR/**/plurals.xml" )
65- }
66- val images = commonResources.matching {
67- include(" MR/images/**/*.png" , " MR/images/**/*.jpg" )
68- }
69-
7052 val androidExtension = target.extensions.getByType(LibraryExtension ::class )
7153 val mainAndroidSet = androidExtension.sourceSets.getByName(" main" )
7254 val manifestFile = mainAndroidSet.manifest.srcFile
@@ -75,9 +57,7 @@ class MultiplatformResourcesPlugin : Plugin<Project> {
7557
7658 generateMultiplatformResources(
7759 project = target,
78- stringsFileTree = strings,
79- pluralsFileTree = plurals,
80- imagesFileTree = images,
60+ commonResources = commonResources,
8161 sourceSets = sourceSets.filter { it.name.endsWith(" Main" ) },
8262 extension = mrExtension,
8363 multiplatformExtension = multiplatformExtension,
@@ -99,9 +79,7 @@ class MultiplatformResourcesPlugin : Plugin<Project> {
9979
10080 private fun generateMultiplatformResources (
10181 project : Project ,
102- stringsFileTree : FileTree ,
103- pluralsFileTree : FileTree ,
104- imagesFileTree : FileTree ,
82+ commonResources : FileTree ,
10583 sourceSets : List <KotlinSourceSet >,
10684 extension : MultiplatformResourcesPluginExtension ,
10785 multiplatformExtension : KotlinMultiplatformExtension ,
@@ -110,15 +88,23 @@ class MultiplatformResourcesPlugin : Plugin<Project> {
11088 val generatedDir = File (project.buildDir, " generated/moko" )
11189
11290 sourceSets.forEach { sourceSet ->
91+ val sourceInfo = SourceInfo (
92+ generatedDir,
93+ sourceSet,
94+ commonResources,
95+ extension.multiplatformResourcesPackage!! ,
96+ androidPackage
97+ )
98+ val features = listOf (
99+ StringsGeneratorFeature (sourceInfo),
100+ PluralsGeneratorFeature (sourceInfo),
101+ ImagesGeneratorFeature (sourceInfo),
102+ FontsGeneratorFeature (sourceInfo)
103+ )
113104 val generator = createGenerator(
114105 multiplatformExtension = multiplatformExtension,
115- generatedDir = generatedDir,
116- sourceSet = sourceSet,
117- stringsFileTree = stringsFileTree,
118- pluralsFileTree = pluralsFileTree,
119- imagesFileTree = imagesFileTree,
120- mrClassPackage = extension.multiplatformResourcesPackage!! ,
121- androidRClassPackage = androidPackage
106+ info = sourceInfo,
107+ features = features
122108 ) ? : return @forEach
123109
124110 generator.apply (project = project)
@@ -127,52 +113,40 @@ class MultiplatformResourcesPlugin : Plugin<Project> {
127113
128114 private fun createGenerator (
129115 multiplatformExtension : KotlinMultiplatformExtension ,
130- generatedDir : File ,
131- sourceSet : KotlinSourceSet ,
132- stringsFileTree : FileTree ,
133- pluralsFileTree : FileTree ,
134- imagesFileTree : FileTree ,
135- mrClassPackage : String ,
136- androidRClassPackage : String
116+ info : SourceInfo ,
117+ features : List <ResourceGeneratorFeature >
137118 ): MRGenerator ? {
138- if (sourceSet.name == KotlinSourceSet .COMMON_MAIN_SOURCE_SET_NAME ) {
139- return createCommonGenerator(
140- generatedDir = generatedDir,
141- sourceSet = sourceSet,
142- stringsFileTree = stringsFileTree,
143- pluralsFileTree = pluralsFileTree,
144- imagesFileTree = imagesFileTree,
145- mrClassPackage = mrClassPackage
119+ if (info.sourceSet.name == KotlinSourceSet .COMMON_MAIN_SOURCE_SET_NAME ) {
120+ return CommonMRGenerator (
121+ info.generatedDir,
122+ info.sourceSet,
123+ info.mrClassPackage,
124+ generators = features.map { it.createCommonGenerator() }
146125 )
147126 }
148127
149128 val target = multiplatformExtension.targets.firstOrNull { target ->
150129 val sourceSets = target.compilations.flatMap { it.kotlinSourceSets }
151- sourceSets.any { it == sourceSet }
130+ sourceSets.any { it == info. sourceSet }
152131 } ? : return null
153132
154133 return when (target) {
155134 is KotlinAndroidTarget -> {
156- createAndroidGenerator(
157- generatedDir = generatedDir,
158- sourceSet = sourceSet,
159- stringsFileTree = stringsFileTree,
160- pluralsFileTree = pluralsFileTree,
161- imagesFileTree = imagesFileTree,
162- mrClassPackage = mrClassPackage,
163- androidRClassPackage = androidRClassPackage
135+ AndroidMRGenerator (
136+ info.generatedDir,
137+ info.sourceSet,
138+ info.mrClassPackage,
139+ generators = features.map{ it.createAndroidGenerator() }
164140 )
165141 }
166142 is KotlinNativeTarget -> {
167143 val family = target.konanTarget.family
168144 if (family == Family .IOS ) {
169- createIosGenerator(
170- generatedDir = generatedDir,
171- sourceSet = sourceSet,
172- stringsFileTree = stringsFileTree,
173- pluralsFileTree = pluralsFileTree,
174- imagesFileTree = imagesFileTree,
175- mrClassPackage = mrClassPackage
145+ IosMRGenerator (
146+ info.generatedDir,
147+ info.sourceSet,
148+ info.mrClassPackage,
149+ generators = features.map{ it.createiOSGenerator() }
176150 )
177151 } else {
178152 println (" unsupported native family $family " )
@@ -185,95 +159,5 @@ class MultiplatformResourcesPlugin : Plugin<Project> {
185159 }
186160 }
187161 }
188-
189- private fun createCommonGenerator (
190- generatedDir : File ,
191- sourceSet : KotlinSourceSet ,
192- stringsFileTree : FileTree ,
193- imagesFileTree : FileTree ,
194- pluralsFileTree : FileTree ,
195- mrClassPackage : String
196- ): MRGenerator {
197- return CommonMRGenerator (
198- generatedDir = generatedDir,
199- sourceSet = sourceSet,
200- mrClassPackage = mrClassPackage,
201- generators = listOf (
202- CommonStringsGenerator (
203- sourceSet = sourceSet,
204- stringsFileTree = stringsFileTree
205- ),
206- CommonPluralsGenerator (
207- sourceSet = sourceSet,
208- pluralsFileTree = pluralsFileTree
209- ),
210- CommonImagesGenerator (
211- sourceSet = sourceSet,
212- inputFileTree = imagesFileTree
213- )
214- )
215- )
216- }
217-
218- private fun createAndroidGenerator (
219- generatedDir : File ,
220- sourceSet : KotlinSourceSet ,
221- stringsFileTree : FileTree ,
222- pluralsFileTree : FileTree ,
223- imagesFileTree : FileTree ,
224- mrClassPackage : String ,
225- androidRClassPackage : String
226- ): MRGenerator {
227- return AndroidMRGenerator (
228- generatedDir = generatedDir,
229- sourceSet = sourceSet,
230- mrClassPackage = mrClassPackage,
231- generators = listOf (
232- AndroidStringsGenerator (
233- sourceSet = sourceSet,
234- stringsFileTree = stringsFileTree,
235- androidRClassPackage = androidRClassPackage
236- ),
237- AndroidPluralsGenerator (
238- sourceSet = sourceSet,
239- pluralsFileTree = pluralsFileTree,
240- androidRClassPackage = androidRClassPackage
241- ),
242- AndroidImagesGenerator (
243- sourceSet = sourceSet,
244- inputFileTree = imagesFileTree,
245- androidRClassPackage = androidRClassPackage
246- )
247- )
248- )
249- }
250-
251- private fun createIosGenerator (
252- generatedDir : File ,
253- sourceSet : KotlinSourceSet ,
254- stringsFileTree : FileTree ,
255- pluralsFileTree : FileTree ,
256- imagesFileTree : FileTree ,
257- mrClassPackage : String
258- ): MRGenerator {
259- return IosMRGenerator (
260- generatedDir = generatedDir,
261- sourceSet = sourceSet,
262- mrClassPackage = mrClassPackage,
263- generators = listOf (
264- IosStringsGenerator (
265- sourceSet = sourceSet,
266- stringsFileTree = stringsFileTree
267- ),
268- IosPluralsGenerator (
269- sourceSet = sourceSet,
270- pluralsFileTree = pluralsFileTree
271- ),
272- IosImagesGenerator (
273- sourceSet = sourceSet,
274- inputFileTree = imagesFileTree
275- )
276- )
277- )
278- }
279162}
163+
0 commit comments