mirror of
https://github.com/HighCapable/Gropify.git
synced 2025-12-10 15:24:07 +08:00
feat: add manifest placeholders support in AndroidGenerateConfig
This commit is contained in:
@@ -126,6 +126,8 @@ internal object DefaultConfig {
|
||||
|
||||
override val isIsolationEnabled get() = true
|
||||
|
||||
override val manifestPlaceholders get() = false
|
||||
|
||||
override val isEnabled
|
||||
get() = selfCommon?.isEnabled
|
||||
?: globalCommon?.isEnabled
|
||||
|
||||
@@ -186,6 +186,11 @@ private fun GropifyConfigureExtension.AndroidGenerateConfigureScope.create(
|
||||
?: global?.isIsolationEnabled
|
||||
?: DefaultConfig.createAndroidGenerateConfig(name, selfCommon, globalCommon).isIsolationEnabled
|
||||
|
||||
override val manifestPlaceholders
|
||||
get() = this@create.manifestPlaceholders
|
||||
?: global?.manifestPlaceholders
|
||||
?: DefaultConfig.createAndroidGenerateConfig(name, selfCommon, globalCommon).manifestPlaceholders
|
||||
|
||||
override val existsPropertyFiles
|
||||
get() = this@create.existsPropertyFiles
|
||||
?: global?.existsPropertyFiles
|
||||
|
||||
@@ -85,7 +85,11 @@ internal interface GropifyConfig {
|
||||
/**
|
||||
* Android project generate configuration interface.
|
||||
*/
|
||||
interface AndroidGenerateConfig : JvmGenerateConfig
|
||||
interface AndroidGenerateConfig : JvmGenerateConfig {
|
||||
|
||||
/** Whether to use manifest placeholders' generation. */
|
||||
val manifestPlaceholders: Boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* Jvm project generate configuration interface.
|
||||
|
||||
@@ -91,7 +91,7 @@ internal class SourceCodeDeployer(private val _config: () -> GropifyConfig) : De
|
||||
val properties = generateMap(config, ProjectDescriptor.create(project = this))
|
||||
|
||||
if (!configModified && properties == cachedProjectProperties[getFullName()] && !outputDir.isEmpty()) {
|
||||
if (config.isEnabled) configureSourceSets(project = this)
|
||||
if (config.isEnabled) configureSourceSets(project = this, properties)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ internal class SourceCodeDeployer(private val _config: () -> GropifyConfig) : De
|
||||
sourceCodeGenerator.build(projectType, config, generateConfig, properties).let { generator ->
|
||||
generator.first { it.type == sourceCodeType }
|
||||
}.writeTo(outputDir)
|
||||
configureSourceSets(project = this)
|
||||
configureSourceSets(project = this, properties)
|
||||
}
|
||||
|
||||
rootProject.generate()
|
||||
@@ -121,7 +121,7 @@ internal class SourceCodeDeployer(private val _config: () -> GropifyConfig) : De
|
||||
}
|
||||
}
|
||||
|
||||
private fun configureSourceSets(project: Project) {
|
||||
private fun configureSourceSets(project: Project, properties: PropertyMap) {
|
||||
val projectType = project.resolveType()
|
||||
|
||||
val config = config.from(project).let {
|
||||
@@ -189,6 +189,24 @@ internal class SourceCodeDeployer(private val _config: () -> GropifyConfig) : De
|
||||
"Project '${project.getFullName()}' source sets deployed failed, method \"srcDir\" maybe failed during the processing."
|
||||
)
|
||||
} else Logger.debug("Source directory \"$generateDirPath\" already added to source set \"${config.sourceSetName}\", skipping.")
|
||||
|
||||
if (projectType == ProjectType.Android &&
|
||||
config is GropifyConfig.AndroidGenerateConfig &&
|
||||
config.manifestPlaceholders
|
||||
) {
|
||||
Logger.debug("Deploying to manifestPlaceholders.")
|
||||
|
||||
val defaultConfig = extension.asResolver().optional(!debugMode).firstMethodOrNull {
|
||||
name = "getDefaultConfig"
|
||||
emptyParameters()
|
||||
}?.invokeQuietly()
|
||||
|
||||
defaultConfig?.asResolver()?.optional(!debugMode)?.firstMethodOrNull {
|
||||
name = "addManifestPlaceholders"
|
||||
parameters(Map::class)
|
||||
superclass()
|
||||
}?.invokeQuietly(properties.map { (key, value) -> key to value.raw }.toMap())
|
||||
}
|
||||
}
|
||||
|
||||
private fun decideSourceCodeType(config: GropifyConfig.CommonCodeGenerateConfig, type: ProjectType) = when (type) {
|
||||
|
||||
@@ -173,7 +173,17 @@ open class GropifyConfigureExtension internal constructor() {
|
||||
@JvmName("extensionName") set
|
||||
}
|
||||
|
||||
open inner class AndroidGenerateConfigureScope internal constructor() : JvmGenerateConfigureScope()
|
||||
open inner class AndroidGenerateConfigureScope internal constructor() : JvmGenerateConfigureScope() {
|
||||
|
||||
/**
|
||||
* Whether to use manifest placeholders' generation.
|
||||
*
|
||||
* Disabled by default, when enabled will synchronize the properties' key-values
|
||||
* to the `manifestPlaceholders` in the `android` configuration method block.
|
||||
*/
|
||||
var manifestPlaceholders: Boolean? = null
|
||||
@JvmName("manifestPlaceholders") set
|
||||
}
|
||||
|
||||
open inner class JvmGenerateConfigureScope internal constructor() : CommonCodeGenerateConfigureScope() {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user