mirror of
https://github.com/HighCapable/SweetProperty.git
synced 2025-09-04 01:35:37 +08:00
refactor: standardize Gradle project naming
This commit is contained in:
@@ -43,11 +43,12 @@ internal class ProjectDescriptor private constructor() {
|
||||
* @return [ProjectDescriptor]
|
||||
*/
|
||||
internal fun create(settings: Settings, name: String = "") = ProjectDescriptor().also {
|
||||
val isRootProject = name.isBlank() || name == settings.rootProject.name
|
||||
val isRootProject = name.isBlank() || name.lowercase() == settings.rootProject.name.lowercase()
|
||||
val subProjectNotice = "if this is a sub-project, please set it like \":$name\""
|
||||
it.type = Type.SETTINGS
|
||||
it.name = name.noBlank() ?: settings.rootProject.name
|
||||
it.currentDir = (if (isRootProject) settings.rootProject else settings.findProject(":$name"))?.projectDir
|
||||
?: SError.make("Project \"$name\" not found")
|
||||
it.currentDir = (if (isRootProject) settings.rootProject else settings.findProject(name))?.projectDir
|
||||
?: SError.make("Project \"$name\" not found${if (name.startsWith(":").not()) ", $subProjectNotice" else ""}")
|
||||
it.rootDir = settings.rootDir
|
||||
it.homeDir = settings.gradle.gradleUserHomeDir
|
||||
}
|
||||
@@ -59,7 +60,7 @@ internal class ProjectDescriptor private constructor() {
|
||||
*/
|
||||
internal fun create(project: Project) = ProjectDescriptor().also {
|
||||
it.type = Type.PROJECT
|
||||
it.name = project.fullName
|
||||
it.name = project.fullName()
|
||||
it.currentDir = project.projectDir
|
||||
it.rootDir = project.rootDir
|
||||
it.homeDir = project.gradle.gradleUserHomeDir
|
||||
|
@@ -29,23 +29,23 @@ import org.gradle.kotlin.dsl.repositories
|
||||
|
||||
/**
|
||||
* 获取指定项目的完整名称
|
||||
* @param isUseColon 是否在子项目前使用冒号 - 默认是
|
||||
* @return [String]
|
||||
*/
|
||||
internal val Project.fullName
|
||||
get(): String {
|
||||
val baseNames = mutableListOf<String>()
|
||||
internal fun Project.fullName(isUseColon: Boolean = true): String {
|
||||
val isRoot = this == rootProject
|
||||
val baseNames = mutableListOf<String>()
|
||||
|
||||
/**
|
||||
* 递归子项目
|
||||
* @param project 当前项目
|
||||
*/
|
||||
fun fetchChild(project: Project) {
|
||||
project.parent?.also { if (it != it.rootProject) fetchChild(it) }
|
||||
baseNames.add(project.name)
|
||||
}
|
||||
fetchChild(project = this)
|
||||
return buildString { baseNames.onEach { append(":$it") }.clear() }.drop(1)
|
||||
}
|
||||
/**
|
||||
* 递归子项目
|
||||
* @param project 当前项目
|
||||
*/
|
||||
fun fetchChild(project: Project) {
|
||||
project.parent?.also { if (it != it.rootProject) fetchChild(it) }
|
||||
baseNames.add(project.name)
|
||||
}; fetchChild(project = this)
|
||||
return buildString { baseNames.onEach { append(":$it") }.clear() }.let { if (isUseColon && isRoot.not()) it else it.drop(1) }
|
||||
}
|
||||
|
||||
/**
|
||||
* 向构建脚本添加自定义依赖
|
||||
|
@@ -33,7 +33,7 @@ import org.gradle.api.Project
|
||||
* @param project 当前项目
|
||||
* @return [ISweetPropertyConfigs.ISubConfigs]
|
||||
*/
|
||||
internal fun ISweetPropertyConfigs.with(project: Project) = projects[project.fullName] ?: global
|
||||
internal fun ISweetPropertyConfigs.with(project: Project) = projects[project.fullName()] ?: global
|
||||
|
||||
/**
|
||||
* 创建 [ISweetPropertyConfigs.ISubConfigs] 实例
|
||||
|
@@ -92,14 +92,23 @@ open class SweetPropertyConfigureExtension internal constructor() {
|
||||
* 配置根项目
|
||||
* @param action 配置方法体
|
||||
*/
|
||||
fun rootProject(action: Action<SubConfigureExtension>) = project(ROOT_PROJECT_TAG, action)
|
||||
fun rootProject(action: Action<SubConfigureExtension>) = configureProject(ROOT_PROJECT_TAG, action, isLowercase = false)
|
||||
|
||||
/**
|
||||
* 配置指定项目
|
||||
* @param name 项目完整名称
|
||||
* @param action 配置方法体
|
||||
*/
|
||||
fun project(name: String, action: Action<SubConfigureExtension>) = action.execute(SubConfigureExtension().also { projectConfigures[name] = it })
|
||||
fun project(name: String, action: Action<SubConfigureExtension>) = configureProject(name, action)
|
||||
|
||||
/**
|
||||
* 配置项目
|
||||
* @param name 项目完整名称
|
||||
* @param action 配置方法体
|
||||
* @param isLowercase 是否转换 [name] 为小写 - 默认是
|
||||
*/
|
||||
private fun configureProject(name: String, action: Action<SubConfigureExtension>, isLowercase: Boolean = true) =
|
||||
action.execute(SubConfigureExtension().also { projectConfigures[if (isLowercase) name.lowercase() else name] = it })
|
||||
|
||||
/**
|
||||
* 子配置方法体实现类
|
||||
@@ -483,14 +492,14 @@ open class SweetPropertyConfigureExtension internal constructor() {
|
||||
val currentGlobal = globalConfigure.create()
|
||||
val currentProjects = mutableMapOf<String, ISweetPropertyConfigs.ISubConfigs>()
|
||||
val rootName = settings.rootProject.name
|
||||
if (projectConfigures.containsKey(rootName))
|
||||
if (projectConfigures.containsKey(rootName.lowercase()))
|
||||
SError.make("This name \"$rootName\" is a root project, please use rootProject function to configure it, not project(\"$rootName\")")
|
||||
if (projectConfigures.containsKey(ROOT_PROJECT_TAG)) {
|
||||
projectConfigures[rootName] = projectConfigures[ROOT_PROJECT_TAG] ?: SError.make("Internal error")
|
||||
projectConfigures[rootName.lowercase()] = projectConfigures[ROOT_PROJECT_TAG] ?: SError.make("Internal error")
|
||||
projectConfigures.remove(ROOT_PROJECT_TAG)
|
||||
}
|
||||
projectConfigures.forEach { (name, subConfigure) ->
|
||||
name.checkingStartWithLetter(description = "Project")
|
||||
name.replaceFirst(":", "").checkingStartWithLetter(description = "Project")
|
||||
subConfigure.checkingNames()
|
||||
currentProjects[name] = subConfigure.create(name, globalConfigure)
|
||||
}; return object : ISweetPropertyConfigs {
|
||||
|
@@ -207,11 +207,11 @@ internal object PropertiesDeployHelper {
|
||||
val outputDir = file(configs.generateDirPath)
|
||||
if (configs.isEnable.not()) return
|
||||
val properties = generatedProperties(configs, ProjectDescriptor.create(project = this))
|
||||
if (isConfigsModified.not() && properties == cachedProjectProperties[fullName] && outputDir.isEmpty().not()) {
|
||||
if (isConfigsModified.not() && properties == cachedProjectProperties[fullName()] && outputDir.isEmpty().not()) {
|
||||
if (configs.isEnable) configureSourceSets(project = this)
|
||||
return
|
||||
}; outputDir.apply { if (exists()) deleteRecursively() }
|
||||
cachedProjectProperties[fullName] = properties
|
||||
cachedProjectProperties[fullName()] = properties
|
||||
val packageName = generatedPackageName(configs, project = this)
|
||||
val className = generatedClassName(configs, project = this)
|
||||
sourcesGenerator.build(configs, properties, packageName, className).writeTo(outputDir)
|
||||
@@ -323,7 +323,7 @@ internal object PropertiesDeployHelper {
|
||||
val packageName = configs.packageName.noBlank()
|
||||
?: project.namespace()
|
||||
?: project.group.toString().noBlank()
|
||||
?: "$DEFAULT_PACKAGE_NAME.${project.fullName.replace(":", "").flatted()}"
|
||||
?: "$DEFAULT_PACKAGE_NAME.${project.fullName(isUseColon = false).replace(":", "").flatted()}"
|
||||
return "$packageName.generated"
|
||||
}
|
||||
|
||||
@@ -335,7 +335,7 @@ internal object PropertiesDeployHelper {
|
||||
*/
|
||||
private fun generatedClassName(configs: ISweetPropertyConfigs.ISourcesCodeGenerateConfigs, project: Project): String {
|
||||
val className = configs.className.noBlank()
|
||||
?: project.fullName.replace(":", "_").uppercamelcase().noBlank()
|
||||
?: project.fullName(isUseColon = false).replace(":", "_").uppercamelcase().noBlank()
|
||||
?: "Undefined"
|
||||
return "${className.uppercamelcase()}Properties"
|
||||
}
|
||||
|
Reference in New Issue
Block a user