Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#48 nested modules resources #64

Merged
merged 12 commits into from
May 3, 2020
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,17 @@ package dev.icerock.gradle
import com.android.build.gradle.LibraryExtension
import com.android.build.gradle.LibraryPlugin
import com.android.build.gradle.api.AndroidSourceSet
import dev.icerock.gradle.generator.AndroidMRGenerator
import dev.icerock.gradle.generator.CommonMRGenerator
import dev.icerock.gradle.generator.IosMRGenerator
import dev.icerock.gradle.generator.FontsGenerator
import dev.icerock.gradle.generator.GenerateMultiplatformResourcesTask
import dev.icerock.gradle.generator.ImagesGenerator
import dev.icerock.gradle.generator.MRGenerator
import dev.icerock.gradle.generator.PluralsGenerator
import dev.icerock.gradle.generator.ResourceGeneratorFeature
import dev.icerock.gradle.generator.SourceInfo
import dev.icerock.gradle.generator.fonts.FontsGeneratorFeature
import dev.icerock.gradle.generator.image.ImagesGeneratorFeature
import dev.icerock.gradle.generator.plurals.PluralsGeneratorFeature
import dev.icerock.gradle.generator.strings.StringsGeneratorFeature
import dev.icerock.gradle.generator.StringsGenerator
import dev.icerock.gradle.generator.android.AndroidMRGenerator
import dev.icerock.gradle.generator.common.CommonMRGenerator
import dev.icerock.gradle.generator.ios.IosMRGenerator
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.SourceSet
Expand Down Expand Up @@ -79,17 +80,23 @@ class MultiplatformResourcesPlugin : Plugin<Project> {
mrExtension.multiplatformResourcesPackage!!,
androidPackage
)
val iosLocalizationRegion = mrExtension.iosBaseLocalizationRegion
val features = listOf(
StringsGeneratorFeature(sourceInfo, mrExtension.iosBaseLocalizationRegion),
PluralsGeneratorFeature(sourceInfo, mrExtension.iosBaseLocalizationRegion),
ImagesGeneratorFeature(sourceInfo),
FontsGeneratorFeature(sourceInfo)
StringsGenerator.Feature(sourceInfo, iosLocalizationRegion),
PluralsGenerator.Feature(sourceInfo, iosLocalizationRegion),
ImagesGenerator.Feature(sourceInfo),
FontsGenerator.Feature(sourceInfo)
)
val targets: List<KotlinTarget> = multiplatformExtension.targets.toList()

setupCommonGenerator(commonSourceSet, generatedDir, mrClassPackage, features, target)
setupAndroidGenerator(targets, androidMainSourceSet, generatedDir, mrClassPackage, features, target)
setupIosGenerator(targets, generatedDir, mrClassPackage, features, target)
setupIosGenerator(targets, generatedDir, mrClassPackage, features, target, iosLocalizationRegion)

val generationTasks = target.tasks.filterIsInstance<GenerateMultiplatformResourcesTask>()
val commonGenerationTask = generationTasks.first { it.name == "generateMRcommonMain" }
generationTasks.filter { it != commonGenerationTask }
.forEach { it.dependsOn(commonGenerationTask) }
}

private fun setupCommonGenerator(
Expand Down Expand Up @@ -132,12 +139,14 @@ class MultiplatformResourcesPlugin : Plugin<Project> {
).apply(target)
}

@Suppress("LongParameterList")
private fun setupIosGenerator(
targets: List<KotlinTarget>,
generatedDir: File,
mrClassPackage: String,
features: List<ResourceGeneratorFeature>,
target: Project
target: Project,
iosLocalizationRegion: String
) {
val compilations = targets
.filterIsInstance<KotlinNativeTarget>()
Expand All @@ -158,7 +167,8 @@ class MultiplatformResourcesPlugin : Plugin<Project> {
sourceSet,
mrClassPackage,
generators = features.map { it.createIosGenerator() },
compilation = compilation
compilation = compilation,
baseLocalizationRegion = iosLocalizationRegion
).apply(target)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ import com.squareup.kotlinpoet.CodeBlock
import com.squareup.kotlinpoet.KModifier
import com.squareup.kotlinpoet.PropertySpec
import com.squareup.kotlinpoet.TypeSpec
import dev.icerock.gradle.generator.strings.KeyType
import dev.icerock.gradle.generator.strings.LanguageType
import java.io.File

abstract class BaseGenerator<T> : MRGenerator.Generator {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* Copyright 2020 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license.
*/

package dev.icerock.gradle.generator.strings
package dev.icerock.gradle.generator

class EqualStringKeysException(
val keys: List<String>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,16 @@
* Copyright 2020 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license.
*/

package dev.icerock.gradle.generator.fonts
package dev.icerock.gradle.generator

import com.squareup.kotlinpoet.ClassName
import com.squareup.kotlinpoet.CodeBlock
import com.squareup.kotlinpoet.KModifier
import com.squareup.kotlinpoet.PropertySpec
import com.squareup.kotlinpoet.TypeSpec
import dev.icerock.gradle.generator.MRGenerator
import dev.icerock.gradle.generator.android.AndroidFontsGenerator
import dev.icerock.gradle.generator.common.CommonFontsGenerator
import dev.icerock.gradle.generator.ios.IosFontsGenerator
import org.gradle.api.file.FileTree
import java.io.File

Expand All @@ -22,7 +24,10 @@ abstract class FontsGenerator(
override fun generate(resourcesGenerationDir: File): TypeSpec {
val typeSpec = createTypeSpec(inputFileTree.map { it.nameWithoutExtension }.sorted())
generateResources(resourcesGenerationDir, inputFileTree.map {
FontFile(key = it.nameWithoutExtension, file = it)
FontFile(
key = it.nameWithoutExtension,
file = it
)
})
return typeSpec
}
Expand Down Expand Up @@ -98,4 +103,25 @@ abstract class FontsGenerator(
val key: String,
val file: File
)

class Feature(private val info: SourceInfo) : ResourceGeneratorFeature {
private val stringsFileTree = info.commonResources.matching {
include("MR/fonts/**.ttf")
}

override fun createCommonGenerator(): MRGenerator.Generator {
return CommonFontsGenerator(stringsFileTree)
}

override fun createIosGenerator(): MRGenerator.Generator {
return IosFontsGenerator(stringsFileTree)
}

override fun createAndroidGenerator(): MRGenerator.Generator {
return AndroidFontsGenerator(
stringsFileTree,
info.androidRClassPackage
)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/*
* Copyright 2020 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license.
*/

package dev.icerock.gradle.generator

import org.gradle.api.DefaultTask

open class GenerateMultiplatformResourcesTask : DefaultTask() {
init {
group = "multiplatform"
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
/*
* Copyright 2019 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license.
* Copyright 2020 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license.
*/

package dev.icerock.gradle.generator.image
package dev.icerock.gradle.generator

import com.squareup.kotlinpoet.ClassName
import com.squareup.kotlinpoet.CodeBlock
import com.squareup.kotlinpoet.KModifier
import com.squareup.kotlinpoet.PropertySpec
import com.squareup.kotlinpoet.TypeSpec
import dev.icerock.gradle.generator.MRGenerator
import dev.icerock.gradle.generator.android.AndroidImagesGenerator
import dev.icerock.gradle.generator.common.CommonImagesGenerator
import dev.icerock.gradle.generator.ios.IosImagesGenerator
import org.gradle.api.file.FileTree
import java.io.File

Expand Down Expand Up @@ -60,4 +62,25 @@ abstract class ImagesGenerator(
abstract fun getPropertyModifiers(): Array<KModifier>

abstract fun getPropertyInitializer(key: String): CodeBlock?

class Feature(private val info: SourceInfo) : ResourceGeneratorFeature {
private val stringsFileTree = info.commonResources.matching {
include("MR/images/**/*.png", "MR/images/**/*.jpg")
}

override fun createCommonGenerator(): MRGenerator.Generator {
return CommonImagesGenerator(stringsFileTree)
}

override fun createIosGenerator(): MRGenerator.Generator {
return IosImagesGenerator(stringsFileTree)
}

override fun createAndroidGenerator(): MRGenerator.Generator {
return AndroidImagesGenerator(
stringsFileTree,
info.androidRClassPackage
)
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import java.io.File
abstract class MRGenerator(
generatedDir: File,
protected val sourceSet: SourceSet,
private val mrClassPackage: String,
protected val mrClassPackage: String,
private val generators: List<Generator>
) {
private val sourcesGenerationDir = File(generatedDir, "${sourceSet.name}/src")
Expand Down Expand Up @@ -60,9 +60,7 @@ abstract class MRGenerator(
val genTaskName = "generateMR$name"
val genTask = runCatching {
project.tasks.getByName(genTaskName)
}.getOrNull() ?: project.task(genTaskName) {
group = "multiplatform"

}.getOrNull() ?: project.tasks.create(genTaskName, GenerateMultiplatformResourcesTask::class.java) {
doLast {
this@MRGenerator.generate()
}
Expand Down
Loading