From f03805ff2c15bc157ec05bb9054825fed2801bb5 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Sun, 3 Sep 2023 01:11:31 +0800 Subject: [PATCH] Initial commit --- .editorconfig | 17 + .gitignore | 13 + .idea/.gitignore | 10 + .idea/compiler.xml | 6 + .idea/icon.png | Bin 0 -> 174356 bytes .idea/inspectionProfiles/Project_Default.xml | 13 + .idea/jarRepositories.xml | 20 + .idea/kotlinc.xml | 6 + .idea/ktlint.xml | 6 + .idea/uiDesigner.xml | 124 ++++++ .idea/vcs.xml | 6 + README-zh-CN.md | 79 ++++ README.md | 85 ++++ build.gradle.kts | 16 + docs/changelog-zh-CN.md | 5 + docs/changelog.md | 5 + docs/guide-zh-CN.md | 282 ++++++++++++ docs/guide.md | 297 +++++++++++++ gradle.properties | 19 + .../sweet-dependency-config.yaml | 25 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 60756 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 234 ++++++++++ gradlew.bat | 89 ++++ img-src/icon.png | Bin 0 -> 174356 bytes settings.gradle.kts | 30 ++ sweetproperty-gradle-plugin/.gitignore | 2 + sweetproperty-gradle-plugin/build.gradle.kts | 65 +++ .../sweetproperty/SweetProperty.kt | 39 ++ .../gradle/entity/ProjectDescriptor.kt | 96 +++++ .../gradle/factory/ExtensionAwareFactory.kt | 116 +++++ .../gradle/factory/GradleProjectFactory.kt | 70 +++ .../gradle/proxy/IGradleLifecycle.kt | 55 +++ .../plugin/SweetPropertyExtension.kt | 57 +++ .../plugin/SweetPropertyPlugin.kt | 51 +++ .../plugin/config/default/DefaultConfigs.kt | 160 +++++++ .../factory/SweetPropertyConfigsFactory.kt | 194 +++++++++ .../config/proxy/ISweetPropertyConfigs.kt | 144 +++++++ .../config/type/GenerateLocationType.kt | 44 ++ .../accessors/proxy/IExtensionAccessors.kt | 27 ++ .../SweetPropertyConfigureExtension.kt | 408 ++++++++++++++++++ .../generator/PropertiesAccessorsGenerator.kt | 398 +++++++++++++++++ .../generator/PropertiesSourcesGenerator.kt | 88 ++++ .../generator/factory/GeneratorFactory.kt | 51 +++ .../plugin/helper/PropertiesDeployHelper.kt | 331 ++++++++++++++ .../sweetproperty/utils/FileFactory.kt | 63 +++ .../sweetproperty/utils/VariableFactory.kt | 110 +++++ .../sweetproperty/utils/code/CodeCompiler.kt | 192 +++++++++ .../utils/code/entity/MavenPomData.kt | 30 ++ .../utils/code/factory/CodeCompilerFactory.kt | 83 ++++ .../sweetproperty/utils/debug/SError.kt | 37 ++ .../sweetproperty/utils/debug/SLog.kt | 38 ++ .../SweetPropertySettingsExtensionFactory.kt | 51 +++ 53 files changed, 4392 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/icon.png create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/kotlinc.xml create mode 100644 .idea/ktlint.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml create mode 100644 README-zh-CN.md create mode 100644 README.md create mode 100644 build.gradle.kts create mode 100644 docs/changelog-zh-CN.md create mode 100644 docs/changelog.md create mode 100644 docs/guide-zh-CN.md create mode 100644 docs/guide.md create mode 100644 gradle.properties create mode 100644 gradle/sweet-dependency/sweet-dependency-config.yaml create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 img-src/icon.png create mode 100644 settings.gradle.kts create mode 100644 sweetproperty-gradle-plugin/.gitignore create mode 100644 sweetproperty-gradle-plugin/build.gradle.kts create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/SweetProperty.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/entity/ProjectDescriptor.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/factory/ExtensionAwareFactory.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/factory/GradleProjectFactory.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/proxy/IGradleLifecycle.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/SweetPropertyExtension.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/SweetPropertyPlugin.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/default/DefaultConfigs.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/factory/SweetPropertyConfigsFactory.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/proxy/ISweetPropertyConfigs.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/type/GenerateLocationType.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/extension/accessors/proxy/IExtensionAccessors.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/extension/dsl/configure/SweetPropertyConfigureExtension.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/generator/PropertiesAccessorsGenerator.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/generator/PropertiesSourcesGenerator.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/generator/factory/GeneratorFactory.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/helper/PropertiesDeployHelper.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/FileFactory.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/VariableFactory.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/code/CodeCompiler.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/code/entity/MavenPomData.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/code/factory/CodeCompilerFactory.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/debug/SError.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/debug/SLog.kt create mode 100644 sweetproperty-gradle-plugin/src/main/java/org/gradle/kotlin/dsl/SweetPropertySettingsExtensionFactory.kt diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..7101007 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +# noinspection EditorConfigKeyCorrectness +[{*.kt,*.kts}] +ktlint_standard_annotation = disabled +ktlint_standard_filename = disabled +ktlint_standard_wrapping = disabled +ktlint_standard_import-ordering = enabled +ktlint_standard_max-line-length = disabled +ktlint_standard_multiline-if-else = disabled +ktlint_standard_argument-list-wrapping = disabled +ktlint_standard_parameter-list-wrapping = disabled +ktlint_standard_trailing-comma-on-declaration-site = disabled +ktlint_function_signature_body_expression_wrapping = multiline +ij_continuation_indent_size = 2 +indent_size = 4 +indent_style = space +insert_final_newline = false +max_line_length = 150 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6f8ad16 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +*.iml +.gradle +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..d649463 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +/gradle.xml +/misc.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/icon.png b/.idea/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..789be36f3cafb0f70f9f890d7fc50bc762be0557 GIT binary patch literal 174356 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 z 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 FngF?-j*$QW literal 0 HcmV?d00001 diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..0cdf4ad --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..fdc392f --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 0000000..f8467b4 --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/ktlint.xml b/.idea/ktlint.xml new file mode 100644 index 0000000..92c4441 --- /dev/null +++ b/.idea/ktlint.xml @@ -0,0 +1,6 @@ + + + + false + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README-zh-CN.md b/README-zh-CN.md new file mode 100644 index 0000000..3efd841 --- /dev/null +++ b/README-zh-CN.md @@ -0,0 +1,79 @@ +# Sweet Property + +[![Blank](https://img.shields.io/badge/license-Apache2.0-blue)](https://github.com/HighCapable/SweetProperty/blob/master/LICENSE) +![Blank](https://img.shields.io/badge/version-v1.0.0-green) +[![Telegram](https://img.shields.io/badge/Discussion-Telegram-blue.svg?logo=telegram)](https://t.me/HighCapable_Dev) + +LOGO + +一个轻松在任意地方获取项目属性的 Gradle 插件。 + +[English](https://github.com/HighCapable/SweetProperty/blob/master/README.md) | 简体中文 + +## 这是什么 + +这是一个用来轻松获取 Gradle 项目属性配置文件 `gradle.properties` 中键值的 Gradle 插件。 + +在使用 Kotlin DSL 作为构建脚本后,无法直接使用 Groovy 弱类型语言获取 `gradle.properties` 中键值的功能。 + +这个时候我们只能使用类似 `properties["custom_key"]` 的方式来进行获取,看起来很麻烦,而且键值名称一旦疏忽造成错误,就会引发问题。 + +这就是这个项目诞生的原因,它的作用是根据指定的属性配置文件生成键值实体类,在构建脚本以及项目中畅通无阻地访问你设置的属性。 + +## 兼容性 + +理论支持不是很旧的 Gradle,建议版本为 `7.x.x` 及以上。 + +支持包含 Kotlin 插件的 Java 项目和 Android 项目,其它类型的项目暂不支持。 + +> 构建脚本语言 + +- Kotlin DSL + +推荐优先使用此语言作为构建脚本语言,这也是目前 Gradle 推荐的语言。 + +- Groovy DSL + +部分功能可能无法兼容,在后期会逐渐放弃支持,且部分功能会无法使用。 + +## 开始使用 + +- [点击这里](https://github.com/HighCapable/SweetProperty/blob/master/docs/guide-zh-CN.md) 查看使用文档 + +## 更新日志 + +- [点击这里](https://github.com/HighCapable/SweetProperty/blob/master/docs/changelog-zh-CN.md) 查看历史更新日志 + +## 项目推广 + +如果你正在寻找一个可以自动管理 Gradle 项目依赖的 Gradle 插件,你可以了解一下 [SweetDependency](https://github.com/HighCapable/SweetDependency) 项目。 + +本项目同样使用了 **SweetDependency**。 + +## Star History + +![Star History Chart](https://api.star-history.com/svg?repos=HighCapable/SweetProperty&type=Date) + +## 许可证 + +- [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) + +``` +Apache License Version 2.0 + +Copyright (C) 2019-2023 HighCapable + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +``` + +版权所有 © 2019-2023 HighCapable \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..29b0069 --- /dev/null +++ b/README.md @@ -0,0 +1,85 @@ +# Sweet Property + +[![Blank](https://img.shields.io/badge/license-Apache2.0-blue)](https://github.com/HighCapable/SweetProperty/blob/master/LICENSE) +![Blank](https://img.shields.io/badge/version-v1.0.0-green) +[![Telegram](https://img.shields.io/badge/Discussion-Telegram-blue.svg?logo=telegram)](https://t.me/HighCapable_Dev) + +LOGO + +An easy get project properties anywhere Gradle plugin. + +English | [简体中文](https://github.com/HighCapable/SweetProperty/blob/master/README-zh-CN.md) + +## What's this + +This is a Gradle plugin to easily get the key-values in the Gradle project properties configuration file `gradle.properties`. + +After using Kotlin DSL as a build script, it is not possible to directly use the Groovy weakly typed language to get the key-values functions +in `gradle.properties`. + +At this time, we can only use a method like `properties["custom_key"]` to obtain it, which seems troublesome, and if the key name is negligent +and causes an error, it will cause problems. + +This is the reason why this project was born. + +Its function is to generate key-values entity class according to the specified properties configuration file, and unimpeded access to the properties +you set in the build script and project. + +## Compatibility + +The theory supports not very old Gradle, the recommended version is `7.x.x` and above. + +Java projects and Android projects containing Kotlin plugins are supported, other types of projects are not supported yet. + +> Build Script Language + +- Kotlin DSL + +It is recommended to use this language as the build script language first, which is also the language currently recommended by Gradle. + +- Groovy DSL + +Some functions may be incompatible, support will be gradually dropped in the future, and some functions may become unavailable. + +## Get Started + +- [Click here](https://github.com/HighCapable/SweetProperty/blob/master/docs/guide.md) to view the documentation + +## Changelog + +- [Click here](https://github.com/HighCapable/SweetProperty/blob/master/docs/changelog.md) to view the historical changelog + +## Promotion + +If you are looking for a Gradle plugin that can automatically manage Gradle project dependencies, +you can check out the [SweetDependency](https://github.com/HighCapable/SweetDependency) project. + +This project also uses **SweetDependency**. + +## Star History + +![Star History Chart](https://api.star-history.com/svg?repos=HighCapable/SweetProperty&type=Date) + +## License + +- [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) + +``` +Apache License Version 2.0 + +Copyright (C) 2019-2023 HighCapable + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +``` + +Copyright © 2019-2023 HighCapable \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..64ba158 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,16 @@ +plugins { + autowire(libs.plugins.kotlin.jvm) apply false +} + +allprojects { + tasks.withType().configureEach { + kotlinOptions { + jvmTarget = "17" + freeCompilerArgs = listOf( + "-Xno-param-assertions", + "-Xno-call-assertions", + "-Xno-receiver-assertions" + ) + } + } +} \ No newline at end of file diff --git a/docs/changelog-zh-CN.md b/docs/changelog-zh-CN.md new file mode 100644 index 0000000..12f05bb --- /dev/null +++ b/docs/changelog-zh-CN.md @@ -0,0 +1,5 @@ +# 更新日志 + +## 1.0.0 | 2023.09.03 + +- 首个版本提交至 Maven \ No newline at end of file diff --git a/docs/changelog.md b/docs/changelog.md new file mode 100644 index 0000000..04e947b --- /dev/null +++ b/docs/changelog.md @@ -0,0 +1,5 @@ +# Changelog + +## 1.0.0 | 2023.09.03 + +- The first version is submitted to Maven \ No newline at end of file diff --git a/docs/guide-zh-CN.md b/docs/guide-zh-CN.md new file mode 100644 index 0000000..0fb1017 --- /dev/null +++ b/docs/guide-zh-CN.md @@ -0,0 +1,282 @@ +# Sweet Property 使用文档 + +在开始使用之前,建议你仔细阅读此文档,以便你能更好地了解它的作用方式与功能。 + +如果你的项目依然在使用 Groovy DSL 进行管理,推荐迁移到 Kotlin DSL。 + +在 Groovy DSL 中使用此插件发生的任何问题,我们都将不再负责排查和修复,并且在后期版本可能会完全不再支持 Groovy DSL。 + +注意:此文档中将不再详细介绍在 Groovy DSL 中的使用方法。 + +## 前提条件 + +请注意 `SweetProperty` 推荐使用 `pluginManagement` 新方式进行装载,它是自 Gradle `7.x.x` 版本开始添加的功能。 + +如果你的项目依然在使用 `buildscript` 的方式进行管理,推荐迁移到新方式,这里将不再提供旧版本的使用方式说明。 + +## 快速开始 + +首先,打开你根项目的 `settings.gradle.kts`。 + +在你根项目的 `settings.gradle.kts` 中加入如下代码。 + +如果已经存在 `pluginManagement` 则不需要重复添加。 + +> 示例如下 + +```kotlin +pluginManagement { + repositories { + gradlePluginPortal() + google() + mavenCentral() + } +} +plugins { + id("com.highcapable.sweetproperty") version "" +} +``` + +请将上述代码中的 `` 替换为 +[Release](https://github.com/HighCapable/SweetProperty/releases) 中的最新版本, 请注意**不要**在后方加入 `apply false`。 + +上述配置完成后,运行一次 Gradle Sync。 + +此时 `SweetProperty` 将会自动搜索根项目和每个子项目中的 `gradle.properties` 文件,并读取其中的属性键值,为每个项目生成对应的代码。 + +## 功能配置 + +你可以对 `SweetProperty` 进行配置来实现自定义和个性化功能。 + +`SweetProperty` 为你提供了相对丰富的可自定义功能,下面是这些功能的说明与配置方法。 + +请在你的 `settings.gradle.kts` 中添加 `sweetProperty` 方法块以开始配置 `SweetProperty`。 + +> 示例如下 + +```kotlin +sweetProperty { + // 启用 SweetProperty,设置为 false 将禁用所有功能 + isEnable = true + // 全局配置 + // 你可以在全局配置中修改所有项目中的配置 + // 每个项目中未进行声明的配置将使用全局配置 + // 每个配置方法块中的功能完全一致 + // 你可以参考下方根项目、子项目的配置方法 + global { + // 通用代码生成功能 + // 在这里你可以同时配置构建脚本和项目生成代码的相关功能 + all { + // 启用功能 + // 你可以分别对 "sourcesCode"、"buildScript" 进行设置 + isEnable = true + // 设置属性配置文件名称 + // 一般情况下不需要修改此设置,错误的文件名将导致获取到空键值内容 + // 如果你有一个自定义名称的属性键值文件,你可以修改这里的设置 + // 注意:建议为每个项目单独配置,而不是在全局中修改,以防发生问题 + propertiesFileName = "gradle.properties" + // 是否启用排除非字符串类型键值内容 + // 默认启用,启用后将从属性键值中排除不是字符串类型的键值及内容 + // 这可以排除例如一些系统环境变量的配置或内存中的数据 + isEnableExcludeNonStringValue = true + // 是否启用类型自动转换功能 + // 默认启用,启用后将自动识别属性键值中的类型并转换为对应的类型 + // 例如 "name=hello" 和 "number=1" 它们将会被自动转换为 String 和 Int + isEnableTypeAutoConversion = true + // 是否启用键值内容插值功能 + // 默认启用,启用后将自动识别属性键值内容中的 ${...} 内容并进行替换 + // 注意:插值的内容仅会从当前 (当前配置文件) 属性键值列表进行查找 + isEnableValueInterpolation = true + // 设置固定存在的属性键值数组 + // 在这里可以设置一些一定存在的键值,这些键值无论能否从属性键值中得到都会进行生成 + // 这些键值在属性键值存在时使用属性键值的内容,不存在时使用这里设置的内容 + // 注意:属性键值名称不能存在特殊符号以及空格,否则可能会生成失败 + // 例如:你需要获取存于自己本机的密钥或证书,但是其他人的设备上没有这些键值 + // 此时这个功能就会变得非常有用,你可以设置在没有这些键值时的默认值 + // 当然,你也可以使用这个功能强行向生成的代码中添加额外的属性键值 + permanentKeyValues( + "permanent.some.key1" to "some_value_1", + "permanent.some.key2" to "some_value_2" + ) + // 设置需要排除的属性键值名称数组 + // 在这里可以设置一些你希望从已知的属性键值中排除的键值名称 + // 这些键值在属性键值存在它们时被排除,不会出现在生成的代码中 + // 注意:如果你排除了 "permanentKeyValues" 中设置的键值, + // 那么它们只会变为你设置的初始键值内容并继续保持存在 + // 你可以传入 Regex 或使用 String.toRegex 以使用正则功能 + excludeKeys( + "exclude.some.key1", + "exclude.some.key2" + ) + // 设置从何处生成属性键值 + // 默认为 "CURRENT_PROJECT" 和 "ROOT_PROJECT" + // 你可以使用以下类型来进行设置 + // "CURRENT_PROJECT" ← 当前项目 + // "ROOT_PROJECT" ← 根项目 + // "GLOBAL" ← 全局 (用户目录) + // "SYSTEM" ← 系统 + // "SYSTEM_ENV" ← 系统环境变量 + // SweetProperty 将从你设置的生成位置依次生成属性键值,生成位置的顺序跟随你设置的顺序决定 + // 风险提示:"GLOBAL"、"SYSTEM"、"SYSTEM_ENV" 可能存在密钥和证书,请小心管理生成的代码 + generateFrom(CURRENT_PROJECT, ROOT_PROJECT) + } + // 项目生成代码功能 + // 此功能类似于 Android 项目自动生成的 BuildConfig + // 在项目中生成的代码可直接被当前项目使用 + // 这里的配置包括 "all" 中的配置,你可以对其进行复写 + sourcesCode { + // 自定义生成的目录路径 + // 你可以填写相对于当前项目的路径 + // 默认为 "build/generated/sweet-property" + // 建议将生成的代码放置于 "build" 目录下,因为生成的代码不建议去修改它 + generateDirPath = "build/generated/sweet-property" + // 自定义生成的包名 + // Android 项目默认使用 "android" 配置方法块中的 "namespace" + // 普通的 Kotlin on Jvm 项目默认使用项目设置的 "project.group" + // 你可以不进行设置,包名在一般情况下会自动进行匹配 + packageName = "com.example.mydemo" + // 自定义生成的类名 + // 默认使用当前项目的名称 + "Properties" + // 你可以不进行设置,类名在一般情况下会自动进行匹配 + className = "MyDemo" + // 是否启用受限访问功能 + // 默认不启用,启用后将为生成的类和方法添加 "internal" 修饰符 + // 如果你的项目为工具库或依赖,通常情况下建议启用 + // 启用后可以防止其他开发者在引用你的库时调用到你的项目属性键值发生问题 + isEnableRestrictedAccess = false + } + // 构建脚本生成代码功能 + // 在构建脚本中生成的代码可直接被当前 "build.gradle.kts" 使用 + // 这里的配置包括 "all" 中的配置,你可以对其进行复写 + // 注意:Gradle 中也有一个 "buildscript" 方法块,只不过是小写的 "s",请不要混淆 + buildScript { + // 自定义构建脚本扩展方法名称 + // 默认为 "property" + // 你将在 "build.gradle.kts" 中使用类似 "property.some.key" 的方式进行调用 + extensionName = "property" + } + } + // 根项目 (Root Project) 配置 + // 这是一个特殊的配置方法块,只能用于根项目 + rootProject { + all { + // 配置 "all" + } + sourcesCode { + // 配置 "sourcesCode" + } + buildScript { + // 配置 "buildScript" + } + } + // 子项目配置 + // 在方法参数中填入需要配置的项目完整名称来配置对应的项目 + // 如果你的项目为嵌套型子项目,例如 app → sub + // 此时你需要使用 ":" 来分隔多个子项目,例如 "app:sub" + // 你不需要再填写子项目前面的 ":",例如 ":app" + // 根项目的名称不能直接用来配置子项目,请使用 "rootProject" + project("app") { + all { + // 配置 "all" + } + sourcesCode { + // 配置 "sourcesCode" + } + buildScript { + // 配置 "buildScript" + } + } +} +``` + +如需在 Groovy DSL 中使用,请将所有变量的 `=` 改为空格,并删除 `Enable` 前方的 `is` 并将 `E` 小写即可。 + +如果你遇到了 `Gradle DSL method not found` 错误,解决方案为迁移到 Kotlin DSL。 + +如果你不想全部使用 Kotlin DSL,你也可以仅将 `settings.gradle` 迁移到 `settings.gradle.kts`。 + +## 使用示例 + +下面是一个项目的 `gradle.properties` 配置文件。 + +```properties +project.groupName=com.highcapable.sweetpropertydemo +project.description=Hello SweetProperty Demo! +project.version=1.0.0 +``` + +在构建脚本 `build.gradle.kts` 中,我们就可以如下所示这样直接去使用这些键值。 + +这里以 Maven 发布的配置部分举例。 + +```kotlin +publications { + create("maven") { + groupId = property.project.groupName + version = property.project.version + pom.description.set(property.project.description) + from(components["java"]) + } +} +``` + +同样地,你也可以在当前项目中调用生成的键值。 + +```kotlin +SweetPropertyDemoProperties.PROJECT_GROUP_NAME +SweetPropertyDemoProperties.PROJECT_DESCRIPTION +SweetPropertyDemoProperties.PROJECT_VERSION +``` + +下面再以 Android 项目举例。 + +在 Android 项目中通常需要配置很多重复、固定的属性,例如 `targetSdk`。 + +```properties +project.compileSdk=33 +project.targetSdk=33 +project.minSdk=22 +``` + +当你设置了 `isEnableTypeAutoConversion = true` 时,`SweetProperty` 在生成实体类过程在默认配置下将尝试将其转换为对应的类型。 + +例如下方所使用的键值,其类型可被识别为整型,可被项目配置直接使用。 + +```kotlin +android { + compileSdk = property.project.compileSdk + defaultConfig { + minSdk = property.project.minSdk + targetSdk = property.project.targetSdk + } +} +``` + +你可以无需再使用 `buildConfigField` 向 `BuildConfig` 添加代码,有了 `SweetProperty` 生成的属性键值代码,你可以更加灵活地管理你的项目。 + +你还可以在属性键值中使用 `${...}` 互相引用其中的内容,但不允许递归引用。 + +当你设置了 `isEnableValueInterpolation = true` 时,`SweetProperty` 将自动合并这些引用的内容到对应位置。 + +```properties +project.name=MyDemo +project.developer.name=myname +project.url=https://github.com/${project.developer.name}/${project.name} +``` + +注意:这个特性是 `SweetProperty` 提供的,原生的 `gradle.properties` 并不支持此功能。 + +**可能遇到的问题** + +如果你的项目仅存在一个根项目,且没有导入任何子项目,此时如果扩展方法不能正常生成, +你可以将你的根项目迁移至子项目并在 `settings.gradle.kts` 中导入这个子项目,这样即可解决此问题。 + +我们一般推荐将项目的功能进行分类,根项目仅用来管理插件和一些配置。 + +**局限性说明** + +`SweetProperty` 无法生成 `settings.gradle.kts` 中的扩展方法,因为这属于 `SweetProperty` 的上游。 + +## 问题反馈 + +如果你在使用 `SweetProperty` 的过程中遇到了任何问题,你都可以随时在 GitHub 开启一个 `issues` 向我们反馈。 \ No newline at end of file diff --git a/docs/guide.md b/docs/guide.md new file mode 100644 index 0000000..646e688 --- /dev/null +++ b/docs/guide.md @@ -0,0 +1,297 @@ +# Sweet Property Documentation + +Before you start using it, it is recommended that you read this document carefully so that you can better understand how it works and its functions. + +If your project is still managed using Groovy DSL, it is recommended to migrate to Kotlin DSL. + +We will no longer be responsible for troubleshooting and fixing any issues that occur with this plugin in Groovy DSL, +and Groovy DSL support may be dropped entirely in later releases. + +Note: Usage in the Groovy DSL will not be detailed in this document. + +## Prerequisites + +Please note that `SweetProperty` is recommended to be loaded using the new `pluginManagement` method, which is a feature added since Gradle `7.x.x` +version. + +If your project is still managed using the `buildscript` method, it is recommended to migrate to the new method, and the instructions for using the +old version will no longer be provided here. + +## Quick Start + +First, open `settings.gradle.kts` in your root project. + +Add the following code to `settings.gradle.kts` in your root project. + +If `pluginManagement` already exists, there is no need to add it again. + +> The following example + +```kotlin +pluginManagement { + repositories { + gradlePluginPortal() + google() + mavenCentral() + } +} +plugins { + id("com.highcapable.sweetproperty") version "" +} +``` + +Please replace `` in the above code with the latest version in +[Release](https://github.com/HighCapable/SweetProperty/releases), please note **DO NOT** add `apply false` after. + +After the above configuration is completed, run Gradle Sync once. + +## Function Configuration + +You can configure `SweetProperty` to achieve custom and personalized functions. + +`SweetProperty` provides you with a relatively rich set of customizable functions. + +The following are the descriptions and configuration methods of these functions. + +Please add `sweetProperty` method block to your `settings.gradle.kts` to start configuring `SweetProperty`. + +> The following example + +```kotlin +sweetProperty { + // Enable SweetProperty, set to false will disable all functions + isEnable = true + // Global configuration + // You can modify the configuration in all projects in the global configuration + // Configurations that are not declared in each project will use the global configuration + // The functions in each configuration method block are exactly the same + // You can refer to the configuration method of the root project and sub-projects below + global { + // General code generation function + // Here you can configure the related functions of the build script and the project generated code at the same time + all { + // Enable functionality + // You can set "sourcesCode" and "buildScript" respectively + isEnable = true + // Set properties name + // In general, you don't need to modify this setting, the wrong file name will lead to getting empty key-values content + // If you have a properties file with a custom name, you can modify the settings here + // Note: It is recommended to configure each project individually, rather than modifying globally, in case of problems + propertiesFileName = "gradle.properties" + // Whether to enable the exclusion of non-string type key-values content + // Enabled by default, when enabled, key-values and content that are not string types will be excluded from the properties key-values + // This can exclude e.g. configuration of some system environment variables or data in memory + isEnableExcludeNonStringValue = true + // Whether to enable the type automatic conversion function + // Enabled by default, when enabled, + // the type in the properties key-values will be automatically recognized and converted to the corresponding type + // For example "name=hello" and "number=1" they will be automatically converted to String and Int + isEnableTypeAutoConversion = true + // Whether to enable key-values content interpolation + // Enabled by default, after enabling, the ${...} content in the properties key-values content + // will be automatically recognized and replaced + // Note: The interpolated content will only be searching from the current (current configuration file) properties key-values list + isEnableValueInterpolation = true + // Set a fixed attribute key-value array + // Here you can set some key values that must exist, + // and these key values will be generated regardless of whether they can be obtained from the properties key-values + // These key-values use the content of the properties key-values when the properties key-values exists, + // and use the content set here when it does not exist + // Note: There cannot be special symbols and spaces in the attribute key value name, otherwise the generation may fail + // For example: you need to obtain the key or certificate stored on your own devices, + // but these keys are not available on other people's devices + // At this point this function will become very useful, you can set the default value when there are no these key-values + // Of course, you can also use this function to forcefully add additional properties key-values to the generated code + permanentKeyValues( + "permanent.some.key1" to "some_value_1", + "permanent.some.key2" to "some_value_2" + ) + // Set an array of properties key-values names that need to be excluded + // Here you can set some key names that you want to exclude from the known properties keys + // These keys are excluded when they exist in the properties keys and will not appear in the generated code + // Note: If you exclude the key-values set in "permanentKeyValues", + // then they will only become the initial key-values content you set and continue to exist + // You can pass in a Regex or use String.toRegex to use the regex function + excludeKeys( + "exclude.some.key1", + "exclude.some.key2" + ) + // Set where to generate properties key-values + // Defaults to "CURRENT_PROJECT" and "ROOT_PROJECT" + // You can use the following types to set + // "CURRENT_PROJECT" ← Current project + // "ROOT_PROJECT" ← Root project + // "GLOBAL" ← Global (user directory) + // "SYSTEM" ← System + // "SYSTEM_ENV" ← System environment variable + // SweetProperty will generate properties key-values sequentially from the generation positions you set, + // and the order of generation positions is determined by the order you set + // Pay Attention: "GLOBAL", "SYSTEM", "SYSTEM_ENV" may have keys and certificates, please manage the generated code carefully + generateFrom(CURRENT_PROJECT, ROOT_PROJECT) + } + // Project generation code function + // This function is similar to the BuildConfig automatically generated by Android projects + // The code generated in the project can be directly used by the current project + // The configuration here includes the configuration in "all", you can override it + sourcesCode { + // Custom generated directory path + // You can fill in the path relative to the current project + // Defaults to "build/generated/sweet-property" + // It is recommended to place the generated code in the "build" directory, + // because the generated code is not recommended to be modified + generateDirPath = "build/generated/sweet-property" + // Custom generated package name + // Android projects use the "namespace" in the "android" configuration method block by default + // Ordinary Kotlin on Jvm projects use the "project.group" of the project settings by default + // You don’t need to set it, the package name will automatically match under normal circumstances + packageName = "com.example.mydemo" + // Custom generated class name + // By default, the name of the current project + "Properties" is used + // You don't need to set it, the class name will be automatically matched under normal circumstances + className = "MyDemo" + // Whether to enable restricted access + // Not enabled by default + // When enabled, the "internal" modifier will be added to the generated classes and methods + // If your project is a tool library or dependency, it is usually recommended to enable it + // Once enabled, it can prevent other developers from calling your project properties key-values when referencing your library + isEnableRestrictedAccess = false + } + // Build script generate code function + // The code generated in the build script can be directly used by the current "build.gradle.kts" + // The configuration here includes the configuration in "all", you can override it + // Note: There is also a "buildscript" method block in Gradle, but it is just a lowercase "s", please don't confuse it + buildScript { + // Custom build script extension method name + // Defaults to "property" + // You will call it in "build.gradle.kts" using something like "property.some.key" + extensionName = "property" + } + } + // Root project configuration + // This is a special configuration method block that can only be used in root projects + rootProject { + all { + // Configure "all" + } + sourcesCode { + // Configure "sourcesCode" + } + buildScript { + // Configure "buildScript" + } + } + // Sub-projects configuration + // Fill in the full name of the project that needs to be configured in the method parameters to configure the corresponding project + // If your project is a nested sub-projects, such as app → sub + // At this point you need to use ":" to separate multiple sub-projects, such as "app:sub" + // You don't need to fill in the ":" in front of the sub-projects, such as ":app" + // The name of the root project cannot be used directly to configure sub-projects, please use "rootProject" + project("app") { + all { + // Configure "all" + } + sourcesCode { + // Configure "sourcesCode" + } + buildScript { + // Configure "buildScript" + } + } +} +``` + +If you want to use it in Groovy DSL, please change the `=` of all variables to spaces, delete the `is` in front of `Enable` and lowercase `E`. + +If you encounter `Gradle DSL method not found` error, the solution is to migrate to Kotlin DSL. + +If you don't want to use the Kotlin DSL entirely, you can also migrate just `settings.gradle` to `settings.gradle.kts`. + +## Usage Example + +Below is a project's `gradle.properties` configuration file. + +```properties +project.groupName=com.highcapable.sweetpropertydemo +project.description=Hello SweetProperty Demo! +project.version=1.0.0 +``` + +In the build script `build.gradle.kts`, we can use these keys directly as shown below. + +Here is an example of the configuration part published by Maven. + +```kotlin +publications { + create("maven") { + groupId = property.project.groupName + version = property.project.version + pom.description.set(property.project.description) + from(components["java"]) + } +} +``` + +Similarly, you can also call the generated key-value in the current project. + +```kotlin +SweetPropertyDemoProperties.PROJECT_GROUP_NAME +SweetPropertyDemoProperties.PROJECT_DESCRIPTION +SweetPropertyDemoProperties.PROJECT_VERSION +``` + +Let's take the Android project as an example. + +In Android projects, it is usually necessary to configure many repeated and fixed properties, such as `targetSdk`. + +```properties +project.compileSdk=33 +project.targetSdk=33 +project.minSdk=22 +``` + +When you set the `isEnableTypeAutoConversion = true`, `SweetProperty` will try to convert it to the corresponding type under the +default configuration during the process of generating the entity class. + +For example, the type of the key-value used below can be recognized as an integer and can be directly used by the project configuration. + +```kotlin +android { + compileSdk = property.project.compileSdk + defaultConfig { + minSdk = property.project.minSdk + targetSdk = property.project.targetSdk + } +} +``` + +You no longer need to use `buildConfigField` to add code to `BuildConfig`, +with the properties key-values code generated by `SweetProperty`, you can manage your project more flexibly. + +You can also use `${...}` in properties values to refer to each other, but recursive references are not allowed. + +When you set the `isEnableValueInterpolation = true`, +`SweetProperty` will automatically merge the contents of these references into the corresponding locations. + +```properties +project.name=MyDemo +project.developer.name=myname +project.url=https://github.com/${project.developer.name}/${project.name} +``` + +Note: This feature is provided by `SweetProperty`, and the native `gradle.properties` does not support this feature. + +**Possible Problems** + +If your project only has one root project and does not import any sub-projects, +if extension methods are not generated properly, +you can solve this problem by migrating your root project to a sub-projects and importing this sub-projects in `settings.gradle.kts`. + +We generally recommend classifying the functions of the project, and the root project is only used to manage plugins and some configurations. + +**Limitations Note** + +`SweetProperty` cannot generated extension methods in `settings.gradle.kts`, because this belongs to the upstream of `SweetProperty`. + +## Feedback + +If you encounter any problems while using `SweetProperty`, you can always open an `issues` on GitHub to give us feedback. \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..56ac50a --- /dev/null +++ b/gradle.properties @@ -0,0 +1,19 @@ +# Project Configuration +project.name=SweetProperty +project.description=An easy get project properties anywhere Gradle plugin +project.url=https://github.com/HighCapable/SweetProperty +project.groupName=com.highcapable.sweetproperty +project.moduleName=sweet-property +project.version=1.0.0 +project.licence.name=Apache License 2.0 +project.licence.url=https://github.com/HighCapable/SweetProperty/blob/master/LICENSE +project.developer.id=0 +project.developer.name=fankes +project.developer.email=qzmmcn@163.com +# Gradle Plugin Configuration +gradle.plugin.moduleName=${project.groupName}.gradle.plugin +gradle.plugin.implementationClass=${project.groupName}.plugin.SweetPropertyPlugin +# Maven Publish Configuration +maven.publish.scm.connection=scm:git:git://github.com/HighCapable/SweetProperty +maven.publish.scm.developerConnection=scm:git:ssh://github.com/HighCapable/SweetProperty +maven.publish.scm.url=https://github.com/HighCapable/SweetProperty \ No newline at end of file diff --git a/gradle/sweet-dependency/sweet-dependency-config.yaml b/gradle/sweet-dependency/sweet-dependency-config.yaml new file mode 100644 index 0000000..3b2167b --- /dev/null +++ b/gradle/sweet-dependency/sweet-dependency-config.yaml @@ -0,0 +1,25 @@ +preferences: + autowire-on-sync-mode: UPDATE_OPTIONAL_DEPENDENCIES + repositories-mode: FAIL_ON_PROJECT_REPOS + +repositories: + gradle-plugin-portal: + scope: PLUGINS + google: + maven-central: + maven-local: + +plugins: + org.jetbrains.kotlin.jvm: + alias: kotlin-jvm + version: 1.9.10 + com.vanniktech.maven.publish: + alias: maven-publish + version: 0.25.3 + +libraries: + com.squareup: + kotlinpoet: + version: 1.14.2 + javapoet: + version: 1.13.0 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..249e5832f090a2944b7473328c07c9755baa3196 GIT binary patch literal 60756 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/img-src/icon.png b/img-src/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..789be36f3cafb0f70f9f890d7fc50bc762be0557 GIT binary patch literal 174356 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 z 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 FngF?-j*$QW literal 0 HcmV?d00001 diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..5c9117a --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,30 @@ +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") +pluginManagement { + repositories { + gradlePluginPortal() + google() + mavenCentral() + mavenLocal() + } +} +plugins { + id("com.highcapable.sweetdependency") version "1.0.0" + id("com.highcapable.sweetproperty") version "1.0.0" +} +sweetDependency { + isEnableVerboseMode = false +} +sweetProperty { + global { + sourcesCode { + className = rootProject.name + isEnableRestrictedAccess = true + } + } + rootProject { sourcesCode { isEnable = false } } + project("sweetproperty-gradle-plugin") { + buildScript { isEnableTypeAutoConversion = false } + } +} +rootProject.name = "SweetProperty" +include(":sweetproperty-gradle-plugin") \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/.gitignore b/sweetproperty-gradle-plugin/.gitignore new file mode 100644 index 0000000..606cfde --- /dev/null +++ b/sweetproperty-gradle-plugin/.gitignore @@ -0,0 +1,2 @@ +.gradle +build/ \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/build.gradle.kts b/sweetproperty-gradle-plugin/build.gradle.kts new file mode 100644 index 0000000..62891a1 --- /dev/null +++ b/sweetproperty-gradle-plugin/build.gradle.kts @@ -0,0 +1,65 @@ +plugins { + `kotlin-dsl` + autowire(libs.plugins.kotlin.jvm) + autowire(libs.plugins.maven.publish) +} + +allprojects { + group = property.project.groupName + version = property.project.version +} + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + withSourcesJar() +} + +kotlin { + jvmToolchain(17) + sourceSets.all { languageSettings { languageVersion = "2.0" } } +} + +dependencies { + implementation(com.squareup.kotlinpoet) + implementation(com.squareup.javapoet) +} + +gradlePlugin { + plugins { + create(property.project.moduleName) { + id = property.project.groupName + implementationClass = property.gradle.plugin.implementationClass + } + } +} + +mavenPublishing { + coordinates(property.project.groupName, property.project.moduleName, property.project.version) + pom { + name = property.project.name + description = property.project.description + url = property.project.url + licenses { + license { + name = property.project.licence.name + url = property.project.licence.url + distribution = property.project.licence.url + } + } + developers { + developer { + id = property.project.developer.id + name = property.project.developer.name + email = property.project.developer.email + } + } + scm { + url = property.maven.publish.scm.url + connection = property.maven.publish.scm.connection + developerConnection = property.maven.publish.scm.developerConnection + } + } + publishToMavenCentral(com.vanniktech.maven.publish.SonatypeHost.S01) + signAllPublications() +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/SweetProperty.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/SweetProperty.kt new file mode 100644 index 0000000..5b016cc --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/SweetProperty.kt @@ -0,0 +1,39 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/25. + */ +package com.highcapable.sweetproperty + +import com.highcapable.sweetproperty.generated.SweetPropertyProperties + +/** + * [SweetProperty] 的装载调用类 + */ +object SweetProperty { + + /** 标签名称 */ + const val TAG = SweetPropertyProperties.PROJECT_NAME + + /** 版本 */ + const val VERSION = SweetPropertyProperties.PROJECT_VERSION + + /** 项目地址 */ + const val PROJECT_URL = SweetPropertyProperties.PROJECT_URL +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/entity/ProjectDescriptor.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/entity/ProjectDescriptor.kt new file mode 100644 index 0000000..3609032 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/entity/ProjectDescriptor.kt @@ -0,0 +1,96 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/28. + */ +package com.highcapable.sweetproperty.gradle.entity + +import com.highcapable.sweetproperty.gradle.factory.fullName +import com.highcapable.sweetproperty.utils.debug.SError +import com.highcapable.sweetproperty.utils.noBlank +import org.gradle.api.Project +import org.gradle.api.initialization.Settings +import java.io.File +import kotlin.properties.Delegates + +/** + * 项目描述实现类 + */ +internal class ProjectDescriptor private constructor() { + + internal companion object { + + /** + * 创建 [ProjectDescriptor] + * @param settings 当前设置 + * @param name 当前名称 (项目) - 默认空 + * @return [ProjectDescriptor] + */ + internal fun create(settings: Settings, name: String = "") = ProjectDescriptor().also { + val isRootProject = name.isBlank() || name == settings.rootProject.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.rootDir = settings.rootDir + it.homeDir = settings.gradle.gradleUserHomeDir + } + + /** + * 创建 [ProjectDescriptor] + * @param project 当前项目 + * @return [ProjectDescriptor] + */ + internal fun create(project: Project) = ProjectDescriptor().also { + it.type = Type.PROJECT + it.name = project.fullName + it.currentDir = project.projectDir + it.rootDir = project.rootDir + it.homeDir = project.gradle.gradleUserHomeDir + } + } + + /** 当前项目类型 */ + internal var type by Delegates.notNull() + + /** 当前项目名称 */ + internal var name = "" + + /** 当前项目目录 */ + internal var currentDir by Delegates.notNull() + + /** 根项目目录 */ + internal var rootDir by Delegates.notNull() + + /** 用户目录 */ + internal var homeDir by Delegates.notNull() + + /** + * 项目类型定义类 + */ + internal enum class Type { + /** 设置 */ + SETTINGS, + + /** 项目 */ + PROJECT + } + + override fun toString() = "ProjectDescriptor(type: $type, name: $name)" +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/factory/ExtensionAwareFactory.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/factory/ExtensionAwareFactory.kt new file mode 100644 index 0000000..7e889f4 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/factory/ExtensionAwareFactory.kt @@ -0,0 +1,116 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/27. + */ +@file:Suppress("unused", "USELESS_CAST", "KotlinRedundantDiagnosticSuppress") + +package com.highcapable.sweetproperty.gradle.factory + +import com.highcapable.sweetproperty.utils.camelcase +import com.highcapable.sweetproperty.utils.debug.SError +import org.gradle.api.Action +import org.gradle.api.plugins.ExtensionAware + +/** + * 创建、获取扩展方法 + * @param name 方法名称 - 自动调用 [toSafeExtName] + * @param clazz 目标对象 [Class] + * @param args 方法参数 + * @return [ExtensionAware] + */ +internal fun ExtensionAware.getOrCreate(name: String, clazz: Class<*>, vararg args: Any?) = name.toSafeExtName().let { sName -> + runCatching { extensions.create(sName, clazz, *args).asExtension() }.getOrElse { + if ((it is IllegalArgumentException && it.message?.startsWith("Cannot add extension with name") == true).not()) throw it + runCatching { extensions.getByName(sName).asExtension() }.getOrNull() ?: SError.make("Create or get extension failed with name \"$sName\"") + } +} + +/** + * 创建、获取扩展方法 - 目标对象 [T] + * @param name 方法名称 - 自动调用 [toSafeExtName] + * @param args 方法参数 + * @return [T] + */ +internal inline fun ExtensionAware.getOrCreate(name: String, vararg args: Any?) = name.toSafeExtName().let { sName -> + runCatching { extensions.create(sName, T::class.java, *args) as T }.getOrElse { + if ((it is IllegalArgumentException && it.message?.startsWith("Cannot add extension with name") == true).not()) throw it + runCatching { extensions.getByName(sName) as? T? }.getOrNull() ?: SError.make("Create or get extension failed with name \"$sName\"") + } +} + +/** + * 获取扩展方法 + * @param name 方法名称 + * @return [ExtensionAware] + */ +internal fun ExtensionAware.get(name: String) = + runCatching { extensions.getByName(name).asExtension() }.getOrNull() ?: SError.make("Could not get extension with name \"$name\"") + +/** + * 获取扩展方法 - 目标对象 [T] + * @param name 方法名称 + * @return [T] + */ +internal inline fun ExtensionAware.get(name: String) = + runCatching { extensions.getByName(name) as T }.getOrNull() ?: SError.make("Could not get extension with name \"$name\"") + +/** + * 获取扩展方法 - 目标对象 [T] + * @return [T] + */ +internal inline fun ExtensionAware.get() = + runCatching { extensions.getByType(T::class.java) as T }.getOrNull() ?: SError.make("Could not get extension with type ${T::class.java}") + +/** + * 配置扩展方法 - 目标对象 [T] + * @param name 方法名称 + * @param configure 配置方法体 + */ +internal inline fun ExtensionAware.configure(name: String, configure: Action) = extensions.configure(name, configure) + +/** + * 是否存在扩展方法 + * @param name 方法名称 + * @return [Boolean] + */ +internal fun ExtensionAware.hasExtension(name: String) = runCatching { extensions.getByName(name); true }.getOrNull() ?: false + +/** + * 转换到扩展方法类型 [ExtensionAware] + * @return [ExtensionAware] + * @throws IllegalStateException 如果类型不是 [ExtensionAware] + */ +internal fun Any.asExtension() = this as? ExtensionAware? ?: SError.make("This instance \"$this\" is not a valid Extension") + +/** + * 由于 Gradle 存在一个 [ExtensionAware] 的扩展 + * + * 此功能用于检测当前字符串是否为 Gradle 使用的关键字名称 + * @return [Boolean] + */ +internal fun String.isUnSafeExtName() = camelcase().let { it == "ext" || it == "extra" || it == "extraProperties" || it == "extensions" } + +/** + * 由于 Gradle 存在一个 [ExtensionAware] 的扩展 + * + * 此功能用于转换不符合规定的字符串到 "{字符串}s" + * @return [String] + */ +internal fun String.toSafeExtName() = if (isUnSafeExtName()) "${this}s" else this \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/factory/GradleProjectFactory.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/factory/GradleProjectFactory.kt new file mode 100644 index 0000000..9f6ab6a --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/factory/GradleProjectFactory.kt @@ -0,0 +1,70 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/27. + */ +package com.highcapable.sweetproperty.gradle.factory + +import com.highcapable.sweetproperty.utils.code.entity.MavenPomData +import com.highcapable.sweetproperty.utils.toFile +import org.gradle.api.Project +import org.gradle.kotlin.dsl.buildscript +import org.gradle.kotlin.dsl.repositories + +/** + * 获取指定项目的完整名称 + * @return [String] + */ +internal val Project.fullName + get(): String { + val baseNames = mutableListOf() + + /** + * 递归子项目 + * @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 repositoryPath 存储库路径 + * @param pomData Maven POM 实体 + */ +internal fun Project.addDependencyToBuildScript(repositoryPath: String, pomData: MavenPomData) = + buildscript { + repositories { + maven { + url = repositoryPath.toFile().toURI() + mavenContent { includeGroup(pomData.groupId) } + } + }; dependencies { classpath("${pomData.groupId}:${pomData.artifactId}:${pomData.version}") } + } + +/** + * 装载构建脚本的 [Class] + * @param name [Class] 完整名称 + * @return [Class] + */ +internal fun Project.loadBuildScriptClass(name: String) = buildscript.classLoader.loadClass(name) \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/proxy/IGradleLifecycle.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/proxy/IGradleLifecycle.kt new file mode 100644 index 0000000..4937a23 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/proxy/IGradleLifecycle.kt @@ -0,0 +1,55 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/27. + */ +package com.highcapable.sweetproperty.gradle.proxy + +import org.gradle.api.Project +import org.gradle.api.initialization.Settings + +/** + * Gradle 生命周期接口 + */ +internal interface IGradleLifecycle { + + /** + * 当 Gradle 开始装载时回调 + * @param settings 当前设置 + */ + fun onSettingsLoaded(settings: Settings) + + /** + * 当 Gradle 装载完成时回调 + * @param settings 当前设置 + */ + fun onSettingsEvaluate(settings: Settings) + + /** + * 当 Gradle 开始装载项目时回调 + * @param rootProject 当前根项目 + */ + fun onProjectLoaded(rootProject: Project) + + /** + * 当 Gradle 项目装载完成时回调 + * @param rootProject 当前根项目 + */ + fun onProjectEvaluate(rootProject: Project) +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/SweetPropertyExtension.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/SweetPropertyExtension.kt new file mode 100644 index 0000000..fd44b60 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/SweetPropertyExtension.kt @@ -0,0 +1,57 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/27. + */ +package com.highcapable.sweetproperty.plugin + +import com.highcapable.sweetproperty.SweetProperty +import com.highcapable.sweetproperty.gradle.factory.getOrCreate +import com.highcapable.sweetproperty.gradle.proxy.IGradleLifecycle +import com.highcapable.sweetproperty.plugin.extension.dsl.configure.SweetPropertyConfigureExtension +import com.highcapable.sweetproperty.plugin.helper.PropertiesDeployHelper +import com.highcapable.sweetproperty.utils.debug.SError +import org.gradle.api.Project +import org.gradle.api.initialization.Settings + +/** + * [SweetProperty] 插件扩展类 + */ +internal class SweetPropertyExtension internal constructor() : IGradleLifecycle { + + /** 当前配置方法体实例 */ + private var configure: SweetPropertyConfigureExtension? = null + + override fun onSettingsLoaded(settings: Settings) { + configure = settings.getOrCreate(SweetPropertyConfigureExtension.NAME) + } + + override fun onSettingsEvaluate(settings: Settings) { + val configs = configure?.build(settings) ?: SError.make("Extension \"${SweetPropertyConfigureExtension.NAME}\" create failed") + PropertiesDeployHelper.initialize(settings, configs) + } + + override fun onProjectLoaded(rootProject: Project) { + PropertiesDeployHelper.resolve(rootProject) + } + + override fun onProjectEvaluate(rootProject: Project) { + PropertiesDeployHelper.deploy(rootProject) + } +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/SweetPropertyPlugin.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/SweetPropertyPlugin.kt new file mode 100644 index 0000000..52aa084 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/SweetPropertyPlugin.kt @@ -0,0 +1,51 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/25. + */ +@file:Suppress("unused") + +package com.highcapable.sweetproperty.plugin + +import com.highcapable.sweetproperty.SweetProperty +import com.highcapable.sweetproperty.utils.debug.SError +import org.gradle.api.Plugin +import org.gradle.api.initialization.Settings +import org.gradle.api.plugins.ExtensionAware + +/** + * [SweetProperty] 插件定义类 + */ +class SweetPropertyPlugin internal constructor() : Plugin { + + /** 当前扩展实例 */ + private val extension = SweetPropertyExtension() + + override fun apply(target: T) = when (target) { + is Settings -> { + extension.onSettingsLoaded(target) + target.gradle.settingsEvaluated { extension.onSettingsEvaluate(target) } + target.gradle.projectsLoaded { + extension.onProjectLoaded(rootProject) + rootProject.afterEvaluate { extension.onProjectEvaluate(rootProject) } + } + } + else -> SError.make("${SweetProperty.TAG} can only applied in settings.gradle/settings.gradle.kts, but current is $target") + } +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/default/DefaultConfigs.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/default/DefaultConfigs.kt new file mode 100644 index 0000000..66c7b14 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/default/DefaultConfigs.kt @@ -0,0 +1,160 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/28. + */ +package com.highcapable.sweetproperty.plugin.config.default + +import com.highcapable.sweetproperty.plugin.config.proxy.ISweetPropertyConfigs +import com.highcapable.sweetproperty.plugin.extension.dsl.configure.SweetPropertyConfigureExtension +import com.highcapable.sweetproperty.utils.noBlank + +/** + * 默认配置类实现类 + */ +internal object DefaultConfigs { + + /** + * 获取默认子配置类 + * @param name 名称 + * @param base 继承配置 - 默认 null + * @return [ISweetPropertyConfigs.ISubConfigs] + */ + internal fun subConfigs(name: String, base: SweetPropertyConfigureExtension.BaseGenerateConfigureExtension? = null) = + object : ISweetPropertyConfigs.ISubConfigs { + override val sourcesCode get() = sourcesCodeGenerateConfigs(name, base) + override val buildScript get() = buildScriptGenerateConfigs(name, base) + } + + /** + * 获取默认项目生成代码配置类 + * @param name 名称 + * @param selfBase 自身继承配置 - 默认 null + * @param globalBase 全局继承配置 - 默认 null + * @return [ISweetPropertyConfigs.ISourcesCodeGenerateConfigs] + */ + internal fun sourcesCodeGenerateConfigs( + name: String, + selfBase: SweetPropertyConfigureExtension.BaseGenerateConfigureExtension? = null, + globalBase: SweetPropertyConfigureExtension.BaseGenerateConfigureExtension? = null + ) = object : ISweetPropertyConfigs.ISourcesCodeGenerateConfigs { + override val name get() = name + override val generateDirPath get() = ISweetPropertyConfigs.DEFAULT_GENERATE_DIR_PATH + override val packageName get() = "" + override val className get() = "" + override val isEnableRestrictedAccess get() = false + override val isEnable + get() = selfBase?.isEnable + ?: globalBase?.isEnable + ?: baseGenerateConfigs(name).isEnable + override val propertiesFileName + get() = selfBase?.propertiesFileName?.noBlank() + ?: globalBase?.propertiesFileName?.noBlank() + ?: baseGenerateConfigs(name).propertiesFileName + override val permanentKeyValues + get() = selfBase?.permanentKeyValues + ?: globalBase?.permanentKeyValues + ?: baseGenerateConfigs(name).permanentKeyValues + override val excludeKeys + get() = selfBase?.excludeKeys + ?: globalBase?.excludeKeys + ?: baseGenerateConfigs(name).excludeKeys + override val isEnableExcludeNonStringValue + get() = selfBase?.isEnableExcludeNonStringValue + ?: globalBase?.isEnableExcludeNonStringValue + ?: baseGenerateConfigs(name).isEnableExcludeNonStringValue + override val isEnableTypeAutoConversion + get() = selfBase?.isEnableTypeAutoConversion + ?: globalBase?.isEnableTypeAutoConversion + ?: baseGenerateConfigs(name).isEnableTypeAutoConversion + override val isEnableValueInterpolation + get() = selfBase?.isEnableValueInterpolation + ?: globalBase?.isEnableValueInterpolation + ?: baseGenerateConfigs(name).isEnableValueInterpolation + override val generateLocationTypes + get() = selfBase?.generateLocationTypes + ?: globalBase?.generateLocationTypes + ?: baseGenerateConfigs(name).generateLocationTypes + } + + /** + * 获取默认构建脚本生成代码配置类 + * @param name 名称 + * @param selfBase 自身继承配置 - 默认 null + * @param globalBase 全局继承配置 - 默认 null + * @return [ISweetPropertyConfigs.IBuildScriptGenerateConfigs] + */ + internal fun buildScriptGenerateConfigs( + name: String, + selfBase: SweetPropertyConfigureExtension.BaseGenerateConfigureExtension? = null, + globalBase: SweetPropertyConfigureExtension.BaseGenerateConfigureExtension? = null + ) = object : ISweetPropertyConfigs.IBuildScriptGenerateConfigs { + override val name get() = name + override val extensionName get() = ISweetPropertyConfigs.DEFAULT_EXTENSION_NAME + override val isEnable + get() = selfBase?.isEnable + ?: globalBase?.isEnable + ?: baseGenerateConfigs(name).isEnable + override val propertiesFileName + get() = selfBase?.propertiesFileName?.noBlank() + ?: globalBase?.propertiesFileName?.noBlank() + ?: baseGenerateConfigs(name).propertiesFileName + override val permanentKeyValues + get() = selfBase?.permanentKeyValues + ?: globalBase?.permanentKeyValues + ?: baseGenerateConfigs(name).permanentKeyValues + override val excludeKeys + get() = selfBase?.excludeKeys + ?: globalBase?.excludeKeys + ?: baseGenerateConfigs(name).excludeKeys + override val isEnableExcludeNonStringValue + get() = selfBase?.isEnableExcludeNonStringValue + ?: globalBase?.isEnableExcludeNonStringValue + ?: baseGenerateConfigs(name).isEnableExcludeNonStringValue + override val isEnableTypeAutoConversion + get() = selfBase?.isEnableTypeAutoConversion + ?: globalBase?.isEnableTypeAutoConversion + ?: baseGenerateConfigs(name).isEnableTypeAutoConversion + override val isEnableValueInterpolation + get() = selfBase?.isEnableValueInterpolation + ?: globalBase?.isEnableValueInterpolation + ?: baseGenerateConfigs(name).isEnableValueInterpolation + override val generateLocationTypes + get() = selfBase?.generateLocationTypes + ?: globalBase?.generateLocationTypes + ?: baseGenerateConfigs(name).generateLocationTypes + } + + /** + * 获取默认通用生成代码配置类 + * @param name 名称 + * @return [ISweetPropertyConfigs.IBaseGenerateConfigs] + */ + private fun baseGenerateConfigs(name: String) = object : ISweetPropertyConfigs.IBaseGenerateConfigs { + override val name get() = name + override val isEnable get() = true + override val propertiesFileName get() = ISweetPropertyConfigs.DEFAULT_PROPERTIES_FILE_NAME + override val permanentKeyValues get() = mutableMapOf() + override val excludeKeys get() = mutableListOf() + override val isEnableExcludeNonStringValue get() = true + override val isEnableTypeAutoConversion get() = true + override val isEnableValueInterpolation get() = true + override val generateLocationTypes get() = ISweetPropertyConfigs.defaultGenerateLocationTypes + } +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/factory/SweetPropertyConfigsFactory.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/factory/SweetPropertyConfigsFactory.kt new file mode 100644 index 0000000..1475783 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/factory/SweetPropertyConfigsFactory.kt @@ -0,0 +1,194 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/28. + */ +package com.highcapable.sweetproperty.plugin.config.factory + +import com.highcapable.sweetproperty.gradle.factory.fullName +import com.highcapable.sweetproperty.plugin.config.default.DefaultConfigs +import com.highcapable.sweetproperty.plugin.config.proxy.ISweetPropertyConfigs +import com.highcapable.sweetproperty.plugin.extension.dsl.configure.SweetPropertyConfigureExtension +import com.highcapable.sweetproperty.utils.noBlank +import org.gradle.api.Project + +/** + * 获取当前配置 + * @param project 当前项目 + * @return [ISweetPropertyConfigs.ISubConfigs] + */ +internal fun ISweetPropertyConfigs.with(project: Project) = projects[project.fullName] ?: global + +/** + * 创建 [ISweetPropertyConfigs.ISubConfigs] 实例 + * @param name 名称 - 默认 "Global" + * @param global 全局配置 - 默认为自身 + * @return [ISweetPropertyConfigs.ISubConfigs] + */ +internal fun SweetPropertyConfigureExtension.SubConfigureExtension.create( + name: String = "Global", + global: SweetPropertyConfigureExtension.SubConfigureExtension = this +) = object : ISweetPropertyConfigs.ISubConfigs { + override val sourcesCode + get() = this@create.sourcesCodeConfigure?.create(name, global.sourcesCodeConfigure, this@create.allConfigure, global.allConfigure) + ?: global.sourcesCodeConfigure?.create(name, globalBase = global.allConfigure) + ?: DefaultConfigs.subConfigs(name, global.allConfigure).sourcesCode + override val buildScript + get() = this@create.buildScriptConfigure?.create(name, global.buildScriptConfigure, this@create.allConfigure, global.allConfigure) + ?: global.buildScriptConfigure?.create(name, globalBase = global.allConfigure) + ?: DefaultConfigs.subConfigs(name, global.allConfigure).buildScript +} + +/** + * 创建 [ISweetPropertyConfigs.ISourcesCodeGenerateConfigs] 实例 + * @param name 名称 + * @param global 全局配置 - 默认 null + * @param selfBase 自身继承配置 - 默认 null + * @param globalBase 全局继承配置 - 默认 null + * @return [ISweetPropertyConfigs.ISourcesCodeGenerateConfigs] + */ +private fun SweetPropertyConfigureExtension.SourcesCodeGenerateConfigureExtension.create( + name: String, + global: SweetPropertyConfigureExtension.SourcesCodeGenerateConfigureExtension? = null, + selfBase: SweetPropertyConfigureExtension.BaseGenerateConfigureExtension? = null, + globalBase: SweetPropertyConfigureExtension.BaseGenerateConfigureExtension? = null +) = object : ISweetPropertyConfigs.ISourcesCodeGenerateConfigs { + override val name get() = name + override val generateDirPath + get() = this@create.generateDirPath.noBlank() + ?: global?.generateDirPath?.noBlank() + ?: DefaultConfigs.sourcesCodeGenerateConfigs(name, selfBase, globalBase).generateDirPath + override val packageName + get() = this@create.packageName.noBlank() + ?: global?.packageName?.noBlank() + ?: DefaultConfigs.sourcesCodeGenerateConfigs(name, selfBase, globalBase).packageName + override val className + get() = this@create.className.noBlank() + ?: global?.className?.noBlank() + ?: DefaultConfigs.sourcesCodeGenerateConfigs(name, selfBase, globalBase).className + override val isEnableRestrictedAccess + get() = this@create.isEnableRestrictedAccess + ?: global?.isEnableRestrictedAccess + ?: DefaultConfigs.sourcesCodeGenerateConfigs(name, selfBase, globalBase).isEnableRestrictedAccess + override val isEnable + get() = this@create.isEnable + ?: selfBase?.isEnable + ?: global?.isEnable + ?: globalBase?.isEnable + ?: DefaultConfigs.sourcesCodeGenerateConfigs(name, selfBase, globalBase).isEnable + override val propertiesFileName + get() = this@create.propertiesFileName.noBlank() + ?: global?.propertiesFileName?.noBlank() + ?: DefaultConfigs.sourcesCodeGenerateConfigs(name, selfBase, globalBase).propertiesFileName + override val permanentKeyValues + get() = this@create.permanentKeyValues + ?: global?.permanentKeyValues + ?: DefaultConfigs.sourcesCodeGenerateConfigs(name, selfBase, globalBase).permanentKeyValues + override val excludeKeys + get() = this@create.excludeKeys + ?: global?.excludeKeys + ?: DefaultConfigs.sourcesCodeGenerateConfigs(name, selfBase, globalBase).excludeKeys + override val isEnableExcludeNonStringValue + get() = this@create.isEnableExcludeNonStringValue + ?: selfBase?.isEnableExcludeNonStringValue + ?: global?.isEnableExcludeNonStringValue + ?: globalBase?.isEnableExcludeNonStringValue + ?: DefaultConfigs.sourcesCodeGenerateConfigs(name, selfBase, globalBase).isEnableExcludeNonStringValue + override val isEnableTypeAutoConversion + get() = this@create.isEnableTypeAutoConversion + ?: selfBase?.isEnableTypeAutoConversion + ?: global?.isEnableTypeAutoConversion + ?: globalBase?.isEnableTypeAutoConversion + ?: DefaultConfigs.sourcesCodeGenerateConfigs(name, selfBase, globalBase).isEnableTypeAutoConversion + override val isEnableValueInterpolation + get() = this@create.isEnableValueInterpolation + ?: selfBase?.isEnableValueInterpolation + ?: global?.isEnableValueInterpolation + ?: globalBase?.isEnableValueInterpolation + ?: DefaultConfigs.sourcesCodeGenerateConfigs(name, selfBase, globalBase).isEnableValueInterpolation + override val generateLocationTypes + get() = this@create.generateLocationTypes + ?: selfBase?.generateLocationTypes + ?: global?.generateLocationTypes + ?: globalBase?.generateLocationTypes + ?: DefaultConfigs.sourcesCodeGenerateConfigs(name, selfBase, globalBase).generateLocationTypes +} + +/** + * 创建 [ISweetPropertyConfigs.IBuildScriptGenerateConfigs] 实例 + * @param name 名称 + * @param global 全局配置 - 默认 null + * @param selfBase 自身继承配置 - 默认 null + * @param globalBase 全局继承配置 - 默认 null + * @return [ISweetPropertyConfigs.IBuildScriptGenerateConfigs] + */ +private fun SweetPropertyConfigureExtension.BuildScriptGenerateConfigureExtension.create( + name: String, + global: SweetPropertyConfigureExtension.BuildScriptGenerateConfigureExtension? = null, + selfBase: SweetPropertyConfigureExtension.BaseGenerateConfigureExtension? = null, + globalBase: SweetPropertyConfigureExtension.BaseGenerateConfigureExtension? = null +) = object : ISweetPropertyConfigs.IBuildScriptGenerateConfigs { + override val name get() = name + override val extensionName + get() = this@create.extensionName.noBlank() + ?: global?.extensionName?.noBlank() + ?: DefaultConfigs.buildScriptGenerateConfigs(name, selfBase, globalBase).extensionName + override val isEnable + get() = this@create.isEnable + ?: selfBase?.isEnable + ?: global?.isEnable + ?: globalBase?.isEnable + ?: DefaultConfigs.buildScriptGenerateConfigs(name, selfBase, globalBase).isEnable + override val propertiesFileName + get() = this@create.propertiesFileName.noBlank() + ?: global?.propertiesFileName?.noBlank() + ?: DefaultConfigs.buildScriptGenerateConfigs(name, selfBase, globalBase).propertiesFileName + override val permanentKeyValues + get() = this@create.permanentKeyValues + ?: global?.permanentKeyValues + ?: DefaultConfigs.buildScriptGenerateConfigs(name, selfBase, globalBase).permanentKeyValues + override val excludeKeys + get() = this@create.excludeKeys + ?: global?.excludeKeys + ?: DefaultConfigs.buildScriptGenerateConfigs(name, selfBase, globalBase).excludeKeys + override val isEnableExcludeNonStringValue + get() = this@create.isEnableExcludeNonStringValue + ?: selfBase?.isEnableExcludeNonStringValue + ?: global?.isEnableExcludeNonStringValue + ?: globalBase?.isEnableExcludeNonStringValue + ?: DefaultConfigs.buildScriptGenerateConfigs(name, selfBase, globalBase).isEnableExcludeNonStringValue + override val isEnableTypeAutoConversion + get() = this@create.isEnableTypeAutoConversion + ?: selfBase?.isEnableTypeAutoConversion + ?: global?.isEnableTypeAutoConversion + ?: globalBase?.isEnableTypeAutoConversion + ?: DefaultConfigs.buildScriptGenerateConfigs(name, selfBase, globalBase).isEnableTypeAutoConversion + override val isEnableValueInterpolation + get() = this@create.isEnableValueInterpolation + ?: selfBase?.isEnableValueInterpolation + ?: global?.isEnableValueInterpolation + ?: globalBase?.isEnableValueInterpolation + ?: DefaultConfigs.buildScriptGenerateConfigs(name, selfBase, globalBase).isEnableValueInterpolation + override val generateLocationTypes + get() = this@create.generateLocationTypes + ?: selfBase?.generateLocationTypes + ?: global?.generateLocationTypes + ?: globalBase?.generateLocationTypes + ?: DefaultConfigs.buildScriptGenerateConfigs(name, selfBase, globalBase).generateLocationTypes +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/proxy/ISweetPropertyConfigs.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/proxy/ISweetPropertyConfigs.kt new file mode 100644 index 0000000..65bc329 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/proxy/ISweetPropertyConfigs.kt @@ -0,0 +1,144 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/25. + */ +package com.highcapable.sweetproperty.plugin.config.proxy + +import com.highcapable.sweetproperty.SweetProperty +import com.highcapable.sweetproperty.generated.SweetPropertyProperties +import com.highcapable.sweetproperty.plugin.config.type.GenerateLocationType + +/** + * [SweetProperty] 配置类接口类 + */ +internal interface ISweetPropertyConfigs { + + companion object { + + /** + * 默认的生成目录路径 + * + * "build/generated/[SweetPropertyProperties.PROJECT_MODULE_NAME]" + */ + internal const val DEFAULT_GENERATE_DIR_PATH = "build/generated/${SweetPropertyProperties.PROJECT_MODULE_NAME}" + + /** + * 默认的属性配置文件名称 + * + * "gradle.properties" + */ + internal const val DEFAULT_PROPERTIES_FILE_NAME = "gradle.properties" + + /** + * 默认的构建脚本扩展方法名称 + * + * "property" + */ + internal const val DEFAULT_EXTENSION_NAME = "property" + + /** + * 默认的生成位置类型数组 + * + * arrayOf([GenerateLocationType.CURRENT_PROJECT], [GenerateLocationType.ROOT_PROJECT]) + */ + internal val defaultGenerateLocationTypes = arrayOf(GenerateLocationType.CURRENT_PROJECT, GenerateLocationType.ROOT_PROJECT) + } + + /** 是否启用插件 */ + val isEnable: Boolean + + /** 配置全部 */ + val global: ISubConfigs + + /** 配置每个项目数组 */ + val projects: MutableMap + + /** + * 子配置类接口类 + */ + interface ISubConfigs { + + /** 项目生成代码配置类接口 */ + val sourcesCode: ISourcesCodeGenerateConfigs + + /** 构建脚本生成代码配置类接口 */ + val buildScript: IBuildScriptGenerateConfigs + } + + /** + * 项目生成代码配置类接口类 + */ + interface ISourcesCodeGenerateConfigs : IBaseGenerateConfigs { + + /** 自定义生成的目录路径 */ + val generateDirPath: String + + /** 自定义生成的包名 */ + val packageName: String + + /** 自定义生成的类名 */ + val className: String + + /** 是否启用受限访问功能 */ + val isEnableRestrictedAccess: Boolean + } + + /** + * 构建脚本生成代码配置类接口类 + */ + interface IBuildScriptGenerateConfigs : IBaseGenerateConfigs { + + /** 自定义构建脚本扩展方法名称 */ + val extensionName: String + } + + /** + * 通用生成代码配置类接口类 + */ + interface IBaseGenerateConfigs { + + /** 名称 */ + val name: String + + /** 是否为当前功能生成代码 */ + val isEnable: Boolean + + /** 属性配置文件名称 */ + val propertiesFileName: String + + /** 固定存在的属性键值数组 */ + val permanentKeyValues: MutableMap + + /** 被排除的属性键值名称数组 */ + val excludeKeys: MutableList + + /** 是否启用排除非字符串类型键值内容 */ + val isEnableExcludeNonStringValue: Boolean + + /** 是否启用类型自动转换功能 */ + val isEnableTypeAutoConversion: Boolean + + /** 是否启用键值内容插值功能 */ + val isEnableValueInterpolation: Boolean + + /** 生成的位置类型数组 */ + val generateLocationTypes: Array + } +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/type/GenerateLocationType.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/type/GenerateLocationType.kt new file mode 100644 index 0000000..e1a40b5 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/type/GenerateLocationType.kt @@ -0,0 +1,44 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/25. + */ +@file:Suppress("unused") + +package com.highcapable.sweetproperty.plugin.config.type + +/** + * 生成位置类型定义类 + */ +internal enum class GenerateLocationType { + /** 当前项目 */ + CURRENT_PROJECT, + + /** 根项目 */ + ROOT_PROJECT, + + /** 全局 */ + GLOBAL, + + /** 系统 */ + SYSTEM, + + /** 系统环境变量 */ + SYSTEM_ENV +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/extension/accessors/proxy/IExtensionAccessors.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/extension/accessors/proxy/IExtensionAccessors.kt new file mode 100644 index 0000000..9a5e3c9 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/extension/accessors/proxy/IExtensionAccessors.kt @@ -0,0 +1,27 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/27. + */ +package com.highcapable.sweetproperty.plugin.extension.accessors.proxy + +/** + * 扩展可访问 [Class] 定义空间接口 + */ +internal interface IExtensionAccessors \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/extension/dsl/configure/SweetPropertyConfigureExtension.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/extension/dsl/configure/SweetPropertyConfigureExtension.kt new file mode 100644 index 0000000..828cc8d --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/extension/dsl/configure/SweetPropertyConfigureExtension.kt @@ -0,0 +1,408 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/25. + */ +@file:Suppress("unused", "MemberVisibilityCanBePrivate", "PropertyName") + +package com.highcapable.sweetproperty.plugin.extension.dsl.configure + +import com.highcapable.sweetproperty.SweetProperty +import com.highcapable.sweetproperty.gradle.factory.isUnSafeExtName +import com.highcapable.sweetproperty.plugin.config.factory.create +import com.highcapable.sweetproperty.plugin.config.proxy.ISweetPropertyConfigs +import com.highcapable.sweetproperty.plugin.config.type.GenerateLocationType +import com.highcapable.sweetproperty.utils.debug.SError +import com.highcapable.sweetproperty.utils.noEmpty +import org.gradle.api.Action +import org.gradle.api.initialization.Settings + +/** + * [SweetProperty] 配置方法体实现类 + */ +open class SweetPropertyConfigureExtension internal constructor() { + + internal companion object { + + /** [SweetPropertyConfigureExtension] 扩展名称 */ + internal const val NAME = "sweetProperty" + + /** 根项目标识名称 */ + private const val ROOT_PROJECT_TAG = "" + } + + /** 当前全局配置实例 */ + internal val globalConfigure = SubConfigureExtension() + + /** 当前每个项目配置实例数组 */ + internal val projectConfigures = mutableMapOf() + + /** 当前项目 */ + @JvmField + val CURRENT_PROJECT = "CURRENT_PROJECT" + + /** 根项目 */ + @JvmField + val ROOT_PROJECT = "ROOT_PROJECT" + + /** 全局 (用户目录) */ + @JvmField + val GLOBAL = "GLOBAL" + + /** 系统 */ + @JvmField + val SYSTEM = "SYSTEM" + + /** 系统环境变量 */ + @JvmField + val SYSTEM_ENV = "SYSTEM_ENV" + + /** + * 是否启用插件 + * + * 默认启用 - 如果你想关闭插件 - 在这里设置就可以了 + */ + var isEnable = true + @JvmName("enable") set + + /** + * 配置全局 + * @param action 配置方法体 + */ + fun global(action: Action) = action.execute(globalConfigure) + + /** + * 配置根项目 + * @param action 配置方法体 + */ + fun rootProject(action: Action) = project(ROOT_PROJECT_TAG, action) + + /** + * 配置指定项目 + * @param name 项目完整名称 + * @param action 配置方法体 + */ + fun project(name: String, action: Action) = action.execute(SubConfigureExtension().also { projectConfigures[name] = it }) + + /** + * 子配置方法体实现类 + */ + open inner class SubConfigureExtension internal constructor() { + + /** 当前通用生成代码功能配置实例 */ + internal var allConfigure: BaseGenerateConfigureExtension? = null + + /** 当前项目生成代码功能配置实例 */ + internal var sourcesCodeConfigure: SourcesCodeGenerateConfigureExtension? = null + + /** 当前构建脚本生成代码功能配置实例 */ + internal var buildScriptConfigure: BuildScriptGenerateConfigureExtension? = null + + /** + * 配置通用生成代码功能 + * @param action 配置方法体 + */ + fun all(action: Action) { + allConfigure = BaseGenerateConfigureExtension().also { action.execute(it) } + } + + /** + * 配置项目生成代码功能 + * @param action 配置方法体 + */ + fun sourcesCode(action: Action) { + sourcesCodeConfigure = SourcesCodeGenerateConfigureExtension().also { action.execute(it) } + } + + /** + * 配置构建脚本生成代码功能 + * @param action 配置方法体 + */ + fun buildScript(action: Action) { + buildScriptConfigure = BuildScriptGenerateConfigureExtension().also { action.execute(it) } + } + } + + /** + * 项目生成代码配置方法体实现类 + */ + open inner class SourcesCodeGenerateConfigureExtension internal constructor() : BaseGenerateConfigureExtension() { + + /** + * 自定义生成的目录路径 + * + * 你可以填写相对于当前项目的路径 + * + * 默认为 [ISweetPropertyConfigs.DEFAULT_GENERATE_DIR_PATH] + */ + var generateDirPath = "" + @JvmName("generateDirPath") set + + /** + * 自定义生成的包名 + * + * Android 项目默认使用 "android" 配置方法块中的 "namespace" + * + * 普通的 Kotlin on Jvm 项目默认使用项目设置的 "project.group" + */ + var packageName = "" + @JvmName("packageName") set + + /** + * 自定义生成的类名 + * + * 默认使用当前项目的名称 + "Properties" + */ + var className = "" + @JvmName("className") set + + /** + * 是否启用受限访问功能 + * + * 默认不启用 - 启用后将为生成的类和方法添加 "internal" 修饰符 + */ + var isEnableRestrictedAccess: Boolean? = null + @JvmName("enableRestrictedAccess") set + } + + /** + * 构建脚本生成代码配置方法体实现类 + */ + open inner class BuildScriptGenerateConfigureExtension internal constructor() : BaseGenerateConfigureExtension() { + + /** + * 自定义构建脚本扩展方法名称 + * + * 默认为 [ISweetPropertyConfigs.DEFAULT_EXTENSION_NAME] + */ + var extensionName = "" + @JvmName("extensionName") set + } + + /** + * 通用生成代码配置方法体实现类 + */ + open inner class BaseGenerateConfigureExtension internal constructor() { + + /** 当前固定存在的属性键值数组 */ + internal var permanentKeyValues: MutableMap? = null + + /** 当前被排除的属性键值名称数组 */ + internal var excludeKeys: MutableList? = null + + /** 当前生成位置类型数组 */ + internal var generateLocationTypes: Array? = null + + /** + * 是否为当前功能生成代码 + * + * 默认启用 + * + * [SourcesCodeGenerateConfigureExtension] 启用后将会为当前项目生成代码并添加到当前项目的 sourceSets 中 + * + * [BuildScriptGenerateConfigureExtension] 启用后将会为构建脚本生成代码并为构建脚本生成扩展方法 + * + * 在 [BuildScriptGenerateConfigureExtension] 中你可以使用 [BuildScriptGenerateConfigureExtension.extensionName] 来自定义构建脚本扩展方法名称 + */ + var isEnable: Boolean? = null + @JvmName("enable") set + + /** + * 设置属性配置文件名称 + * + * 默认为 [ISweetPropertyConfigs.DEFAULT_PROPERTIES_FILE_NAME] + * + * - 注意:一般情况下不需要修改此设置 - 错误的文件名将导致获取到空键值内容 + */ + var propertiesFileName = "" + @JvmName("propertiesFileName") set + + /** + * 是否启用排除非字符串类型键值内容 + * + * 默认启用 - 启用后将从属性键值中排除不是字符串类型的键值及内容 + */ + var isEnableExcludeNonStringValue: Boolean? = null + @JvmName("enableExcludeNonStringValue") set + + /** + * 是否启用类型自动转换功能 + * + * + * 默认启用 - 启用后将自动识别属性键值中的类型并转换为对应的类型 + */ + var isEnableTypeAutoConversion: Boolean? = null + @JvmName("enableTypeAutoConversion") set + + /** + * 是否启用键值内容插值功能 + * + * 默认启用 - 启用后将自动识别属性键值内容中的 ${...} 内容并进行替换 + * + * 注意:插值的内容仅会从当前 (当前配置文件) 属性键值列表进行查找 + */ + var isEnableValueInterpolation: Boolean? = null + @JvmName("enableValueInterpolation") set + + /** + * 设置固定存在的属性键值数组 + * + * 在这里可以设置一些一定存在的键值 - 这些键值无论能否从属性键值中得到都会进行生成 + * + * 这些键值在属性键值存在时使用属性键值的内容 - 不存在时使用这里设置的内容 + * + * - 注意:属性键值名称不能存在特殊符号以及空格 - 否则可能会生成失败 + * @param pairs 键值数组 + */ + @JvmName("-kotlin-dsl-only-permanentKeyValues-") + fun permanentKeyValues(vararg pairs: Pair) { + if (pairs.isEmpty()) SError.make("Permanent key-values must not be empty") + if (pairs.any { it.first.isBlank() }) SError.make("Permanent key-values must not have blank contents") + permanentKeyValues = mutableMapOf(*pairs) + } + + /** + * 设置固定存在的属性键值数组 (Groovy 兼容方法) + * + * 在这里可以设置一些一定存在的键值 - 这些键值无论能否从属性键值中得到都会进行生成 + * + * 这些键值在属性键值存在时使用属性键值的内容 - 不存在时使用这里设置的内容 + * + * - 注意:属性键值名称不能存在特殊符号以及空格 - 否则可能会生成失败 + * @param keyValues 键值数组 + */ + fun permanentKeyValues(keyValues: Map) { + if (keyValues.isEmpty()) SError.make("Permanent key-values must not be empty") + if (keyValues.any { it.key.isBlank() }) SError.make("Permanent key-values must not have blank contents") + permanentKeyValues = keyValues.toMutableMap() + } + + /** + * 设置需要排除的属性键值名称数组 + * + * 在这里可以设置一些你希望从已知的属性键值中排除的键值名称 + * + * 这些键值在属性键值存在它们时被排除 - 不会出现在生成的代码中 + * + * - 注意:如果你排除了 [permanentKeyValues] 中设置的键值 - + * 那么它们只会变为你设置的初始键值内容并继续保持存在 + * @param keys 键值名称数组 - 你可以传入 [Regex] 或使用 [String.toRegex] 以使用正则功能 + */ + fun excludeKeys(vararg keys: Any) { + if (keys.isEmpty()) SError.make("Exclude keys must not be empty") + if (keys.any { it.toString().isBlank() }) SError.make("Exclude keys must not have blank contents") + excludeKeys = keys.distinct().toMutableList() + } + + /** + * 设置从何处生成属性键值 + * + * 默认为 [ISweetPropertyConfigs.defaultGenerateLocationTypes] + * + * 你可以使用以下类型来进行设置 + * + * - [CURRENT_PROJECT] + * - [ROOT_PROJECT] + * - [GLOBAL] + * - [SYSTEM] + * - [SYSTEM_ENV] + * + * [SweetProperty] 将从你设置的生成位置依次生成属性键值 - 生成位置的顺序跟随你设置的顺序决定 + * + * - 风险提示:[GLOBAL]、[SYSTEM]、[SYSTEM_ENV] 可能存在密钥和证书 - 请小心管理生成的代码 + * @param types 位置类型数组 + */ + fun generateFrom(vararg types: String) { + generateLocationTypes = mutableListOf().apply { + types.toList().noEmpty()?.forEach { + add(when (it) { + CURRENT_PROJECT -> GenerateLocationType.CURRENT_PROJECT + ROOT_PROJECT -> GenerateLocationType.ROOT_PROJECT + GLOBAL -> GenerateLocationType.GLOBAL + SYSTEM -> GenerateLocationType.SYSTEM + SYSTEM_ENV -> GenerateLocationType.SYSTEM_ENV + else -> SError.make("Invalid generate location type \"$it\"") + }) + } ?: SError.make("Generate location types must not be empty") + }.toTypedArray() + } + } + + /** + * 构造 [ISweetPropertyConfigs] + * @param settings 当前设置 + * @return [ISweetPropertyConfigs] + */ + internal fun build(settings: Settings): ISweetPropertyConfigs { + /** + * 检查是否以字母开头 + * @param description 描述 + */ + fun String.checkingStartWithLetter(description: String) { + firstOrNull()?.also { + if (it !in 'A'..'Z' && it !in 'a'..'z') SError.make("$description name \"$this\" must start with a letter") + } + } + + /** 检查合法包名 */ + fun String.checkingValidPackageName() { + if (isNotBlank() && matches("^[a-zA-Z_][a-zA-Z0-9_]*(\\.[a-zA-Z_][a-zA-Z0-9_]*)*$".toRegex()).not()) + SError.make("Invalid package name \"$this\"") + } + + /** 检查合法类名 */ + fun String.checkingValidClassName() { + if (isNotBlank() && matches("^[a-zA-Z][a-zA-Z0-9_]*$".toRegex()).not()) + SError.make("Invalid class name \"$this\"") + } + + /** 检查合法扩展方法名称 */ + fun String.checkingValidExtensionName() { + checkingStartWithLetter(description = "Extension") + if (isNotBlank() && isUnSafeExtName()) SError.make("This name \"$this\" is a Gradle built-in extension") + } + + /** 检查名称是否合法 */ + fun SweetPropertyConfigureExtension.SubConfigureExtension.checkingNames() { + sourcesCodeConfigure?.packageName?.checkingValidPackageName() + sourcesCodeConfigure?.className?.checkingValidClassName() + buildScriptConfigure?.extensionName?.checkingValidExtensionName() + } + val currentEnable = isEnable + globalConfigure.checkingNames() + val currentGlobal = globalConfigure.create() + val currentProjects = mutableMapOf() + val rootName = settings.rootProject.name + if (projectConfigures.containsKey(rootName)) + 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.remove(ROOT_PROJECT_TAG) + } + projectConfigures.forEach { (name, subConfigure) -> + name.checkingStartWithLetter(description = "Project") + subConfigure.checkingNames() + currentProjects[name] = subConfigure.create(name, globalConfigure) + }; return object : ISweetPropertyConfigs { + override val isEnable get() = currentEnable + override val global get() = currentGlobal + override val projects get() = currentProjects + } + } +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/generator/PropertiesAccessorsGenerator.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/generator/PropertiesAccessorsGenerator.kt new file mode 100644 index 0000000..ae34635 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/generator/PropertiesAccessorsGenerator.kt @@ -0,0 +1,398 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/27. + */ +package com.highcapable.sweetproperty.plugin.generator + +import com.highcapable.sweetproperty.SweetProperty +import com.highcapable.sweetproperty.generated.SweetPropertyProperties +import com.highcapable.sweetproperty.plugin.config.proxy.ISweetPropertyConfigs +import com.highcapable.sweetproperty.plugin.extension.accessors.proxy.IExtensionAccessors +import com.highcapable.sweetproperty.plugin.generator.factory.PropertyMap +import com.highcapable.sweetproperty.plugin.generator.factory.parseTypedValue +import com.highcapable.sweetproperty.utils.capitalize +import com.highcapable.sweetproperty.utils.debug.SError +import com.highcapable.sweetproperty.utils.firstNumberToLetter +import com.highcapable.sweetproperty.utils.toNonJavaName +import com.highcapable.sweetproperty.utils.uncapitalize +import com.highcapable.sweetproperty.utils.uppercamelcase +import com.squareup.javapoet.ClassName +import com.squareup.javapoet.FieldSpec +import com.squareup.javapoet.JavaFile +import com.squareup.javapoet.MethodSpec +import com.squareup.javapoet.TypeSpec +import java.text.SimpleDateFormat +import java.util.* +import javax.lang.model.element.Modifier +import kotlin.properties.Delegates + +/** + * 属性键值可访问 [Class] 生成实现类 + */ +internal class PropertiesAccessorsGenerator { + + private companion object { + + /** 生成的 [Class] 所在包名 */ + private const val ACCESSORS_PACKAGE_NAME = "${SweetPropertyProperties.PROJECT_GROUP_NAME}.plugin.extension.accessors.generated" + + /** 生成的 [Class] 后缀名 */ + private const val CLASS_SUFFIX_NAME = "Accessors" + + /** 生成的首位 [Class] 后缀名 */ + private const val TOP_CLASS_SUFFIX_NAME = "Properties$CLASS_SUFFIX_NAME" + + /** 标识首位生成的 [Class] TAG */ + private const val TOP_SUCCESSIVE_NAME = "_top_successive_name" + } + + /** 当前配置实例 */ + private var configs by Delegates.notNull() + + /** 生成的属性键值 [Class] 构建器数组 */ + private val classSpecs = mutableMapOf() + + /** 生成的属性键值构造方法构建器数组 */ + private val constructorSpecs = mutableMapOf() + + /** 生成的属性键值预添加的构造方法名称数组 */ + private val preAddConstructorSpecNames = mutableListOf>() + + /** 生成的属性键值 [Class] 扩展类名数组 */ + private val memoryExtensionClasses = mutableMapOf() + + /** 生成的属性键值连续名称记录数组 */ + private val grandSuccessiveNames = mutableListOf() + + /** 生成的属性键值连续名称重复次数数组 */ + private val grandSuccessiveDuplicateIndexs = mutableMapOf() + + /** 生成的属性键值不重复 TAG 数组 */ + private val usedSuccessiveTags = mutableSetOf() + + /** + * 不重复调用 + * @param tags 当前 TAG 数组 + * @param block 执行的方法块 + */ + private inline fun noRepeated(vararg tags: String, block: () -> Unit) { + val allTag = tags.joinToString("-") + if (usedSuccessiveTags.contains(allTag).not()) block() + usedSuccessiveTags.add(allTag) + } + + /** + * 字符串首字母大写并添加 [CLASS_SUFFIX_NAME] 后缀 + * @return [String] + */ + private fun String.capitalized() = "${capitalize()}$CLASS_SUFFIX_NAME" + + /** + * 字符串首字母小写并添加 [CLASS_SUFFIX_NAME] 后缀 + * @return [String] + */ + private fun String.uncapitalized() = "${uncapitalize()}$CLASS_SUFFIX_NAME" + + /** + * 字符串类名转换为 [ClassName] + * @param packageName 包名 - 默认空 + * @return [ClassName] + */ + private fun String.asClassType(packageName: String = "") = ClassName.get(packageName, this) + + /** + * 通过 [TypeSpec] 创建 [JavaFile] + * @return [JavaFile] + */ + private fun TypeSpec.createJavaFile(packageName: String) = JavaFile.builder(packageName, this).build() + + /** + * 创建通用构建器描述类 + * @param name 名称 + * @param accessorsName 接续名 - 默认空 + * @param isInner 是否为内部类 - 默认是 + * @return [TypeSpec.Builder] + */ + private fun createClassSpec(name: String, accessorsName: String = "", isInner: Boolean = true) = + TypeSpec.classBuilder(if (isInner) name.capitalized() else name).apply { + if (isInner) { + addJavadoc("The \"$accessorsName\" accessors") + addSuperinterface(IExtensionAccessors::class.java) + addModifiers(Modifier.PUBLIC, Modifier.STATIC) + } else { + addJavadoc( + """ + This class is generated by ${SweetProperty.TAG} at ${SimpleDateFormat.getDateTimeInstance().format(Date())} +
+ The content here is automatically generated according to the properties of your projects +
+ You can visit
here for more help + """.trimIndent() + ) + addModifiers(Modifier.PUBLIC) + } + } + + /** + * 创建通用构造方法构建器描述类 + * @return [MethodSpec.Builder] + */ + private fun createConstructorSpec() = MethodSpec.constructorBuilder().addModifiers(Modifier.PUBLIC) + + /** + * 向通用构建器描述类添加变量 + * @param accessorsName 接续名 + * @param className 类名 + * @return [TypeSpec.Builder] + */ + private fun TypeSpec.Builder.addSuccessiveField(accessorsName: String, className: String) = addField( + FieldSpec.builder(className.capitalized().asClassType(), className.uncapitalized(), Modifier.PRIVATE, Modifier.FINAL) + .addJavadoc("Create the \"$accessorsName\" accessors") + .build() + ) + + /** + * 向通用构建器描述类添加方法 + * @param accessorsName 接续名 + * @param methodName 方法名 + * @param className 类名 + * @return [TypeSpec.Builder] + */ + private fun TypeSpec.Builder.addSuccessiveMethod(accessorsName: String, methodName: String, className: String) = + addMethod( + MethodSpec.methodBuilder("get${methodName.capitalize()}") + .addJavadoc("Resolve the \"$accessorsName\" accessors") + .addModifiers(Modifier.PUBLIC, Modifier.FINAL) + .returns(className.capitalized().asClassType()) + .addStatement("return ${className.uncapitalized()}") + .build() + ) + + /** + * 向通用构建器描述类添加最终键值方法 + * @param accessorsName 接续名 + * @param methodName 方法名 + * @param value 键值内容 + * @return [TypeSpec.Builder] + */ + private fun TypeSpec.Builder.addFinalValueMethod(accessorsName: String, methodName: String, value: Any) = + addMethod( + MethodSpec.methodBuilder("get${methodName.capitalize()}") + .addJavadoc("Resolve the \"$accessorsName\" value \"$value\"") + .addModifiers(Modifier.PUBLIC, Modifier.FINAL).apply { + val typedValue = value.parseTypedValue(configs.isEnableTypeAutoConversion) + returns(typedValue.first.java) + addStatement("return ${typedValue.second}") + }.build() + ) + + /** + * 向通用构造方法构建器描述类添加变量实例化语句 + * @param className 类名 + * @return [MethodSpec.Builder] + */ + private fun MethodSpec.Builder.addSuccessiveStatement(className: String) = + addStatement("${className.uncapitalized()} = new ${className.capitalized()}()") + + /** + * 获取、创建通用构建器描述类 + * @param name 名称 + * @param accessorsName 接续名 - 默认空 + * @return [TypeSpec.Builder] + */ + private fun getOrCreateClassSpec(name: String, accessorsName: String = "") = + classSpecs[name] ?: createClassSpec(name, accessorsName).also { classSpecs[name] = it } + + /** + * 获取、创建通用构造方法构建器描述类 + * @param name 名称 + * @return [MethodSpec.Builder] + */ + private fun getOrCreateConstructorSpec(name: String) = constructorSpecs[name] ?: createConstructorSpec().also { constructorSpecs[name] = it } + + /** + * 解析并生成所有类的构建器 (核心方法) + * + * 解析开始前需要确保已调用 [createTopClassSpec] 并调用一次 [clearGeneratedData] 防止数据混淆 + * + * 解析完成后需要调用 [releaseParseTypeSpec] 完成解析 + * @param successiveName 连续的名称 + * @param value 键值内容 + */ + private fun parseTypeSpec(successiveName: String, value: Any) { + /** + * 获取生成的属性键值连续名称重复次数 + * @return [Int] + */ + fun String.duplicateGrandSuccessiveIndex() = lowercase().let { name -> + if (grandSuccessiveDuplicateIndexs.contains(name)) { + grandSuccessiveDuplicateIndexs[name] = (grandSuccessiveDuplicateIndexs[name] ?: 1) + 1 + grandSuccessiveDuplicateIndexs[name] ?: 2 + } else 2.also { grandSuccessiveDuplicateIndexs[name] = it } + } + + /** + * 解析 (拆分) 名称到数组 + * + * 形如 "com.mytest" → "ComMytest" → "mytest" + * @return [List]<[Triple]<[String], [String], [String]>> + */ + fun String.parseSuccessiveNames(): List> { + var grandAcccessorsName = "" + var grandSuccessiveName = "" + val successiveNames = mutableListOf>() + val splitNames = replace(".", "|").replace("-", "|") + .replace("_", "|").replace(" ", "_") + .split("|").dropWhile { it.isBlank() } + .ifEmpty { listOf(this) } + splitNames.forEach { eachName -> + val name = eachName.capitalize().toNonJavaName().firstNumberToLetter() + grandAcccessorsName += if (grandAcccessorsName.isNotBlank()) ".$eachName" else eachName + grandSuccessiveName += name + if (grandSuccessiveNames.any { it != grandSuccessiveName && it.lowercase() == grandSuccessiveName.lowercase() }) + grandSuccessiveName += duplicateGrandSuccessiveIndex().toString() + grandSuccessiveNames.add(grandSuccessiveName) + successiveNames.add(Triple(grandAcccessorsName, grandSuccessiveName, name)) + }; return successiveNames.distinct() + } + val successiveNames = successiveName.parseSuccessiveNames() + successiveNames.forEachIndexed { index, (accessorsName, className, methodName) -> + val nextItem = successiveNames.getOrNull(index + 1) + val lastItem = successiveNames.getOrNull(successiveNames.lastIndex) + val nextAccessorsName = nextItem?.first ?: "" + val nextClassName = nextItem?.second ?: "" + val nextMethodName = nextItem?.third ?: "" + val lastMethodName = lastItem?.third ?: "" + val isPreLastIndex = index == successiveNames.lastIndex - 1 + if (successiveNames.size == 1) getOrCreateClassSpec(TOP_SUCCESSIVE_NAME).addFinalValueMethod(successiveName, methodName, value) + if (index == successiveNames.lastIndex) return@forEachIndexed + if (index == 0) noRepeated(TOP_SUCCESSIVE_NAME, methodName, className) { + getOrCreateClassSpec(TOP_SUCCESSIVE_NAME, accessorsName) + .addSuccessiveField(accessorsName, className) + .addSuccessiveMethod(accessorsName, methodName, className) + getOrCreateConstructorSpec(TOP_SUCCESSIVE_NAME).addSuccessiveStatement(className) + } + noRepeated(className, nextMethodName, nextClassName) { + getOrCreateClassSpec(className, accessorsName).apply { + if (isPreLastIndex.not()) { + addSuccessiveField(nextAccessorsName, nextClassName) + addSuccessiveMethod(nextAccessorsName, nextMethodName, nextClassName) + } else addFinalValueMethod(successiveName, lastMethodName, value) + } + if (isPreLastIndex.not()) preAddConstructorSpecNames.add(className to nextClassName) + } + } + } + + /** 完成生成所有类的构建器 (释放) */ + private fun releaseParseTypeSpec() = + preAddConstructorSpecNames.onEach { (topClassName, innerClassName) -> + getOrCreateConstructorSpec(topClassName)?.addSuccessiveStatement(innerClassName) + }.clear() + + /** + * 解析并生成所有类的构建器 + * @return [TypeSpec] + */ + private fun buildTypeSpec(): TypeSpec { + classSpecs.forEach { (name, typeSpec) -> + constructorSpecs[name]?.build()?.let { typeSpec.addMethod(it) } + if (name != TOP_SUCCESSIVE_NAME) classSpecs[TOP_SUCCESSIVE_NAME]?.addType(typeSpec.build()) + }; return classSpecs[TOP_SUCCESSIVE_NAME]?.build() ?: SError.make("Merge accessors classes failed") + } + + /** + * 创建首位构建器 + * @param configs 当前配置 + * @throws IllegalStateException 如果名称为空 + */ + private fun createTopClassSpec(configs: ISweetPropertyConfigs.IBuildScriptGenerateConfigs) { + if (configs.name.isBlank()) SError.make("Class name cannot be empty or blank") + this.configs = configs + val topClassName = "${configs.name.replace(":", "_").uppercamelcase()}$TOP_CLASS_SUFFIX_NAME" + memoryExtensionClasses[configs.name] = "$ACCESSORS_PACKAGE_NAME.$topClassName" + classSpecs[TOP_SUCCESSIVE_NAME] = createClassSpec(topClassName, isInner = false) + constructorSpecs[TOP_SUCCESSIVE_NAME] = createConstructorSpec() + } + + /** + * 清空所有已生成的数据 + * @param isClearAll 是否全部清空 - 包括添加的 [memoryExtensionClasses] - 默认否 + */ + private fun clearGeneratedData(isClearAll: Boolean = false) { + classSpecs.clear() + constructorSpecs.clear() + preAddConstructorSpecNames.clear() + grandSuccessiveNames.clear() + grandSuccessiveDuplicateIndexs.clear() + usedSuccessiveTags.clear() + if (isClearAll) memoryExtensionClasses.clear() + } + + /** + * 生成 [JavaFile] 数组 + * + * - 注意:[allConfigs] 与 [allKeyValues] 数量必须相等 + * @param allConfigs 全部配置实例 + * @param allKeyValues 全部键值数组 + * @return [MutableList]<[JavaFile]> + * @throws IllegalStateException 如果生成失败 + */ + internal fun build( + allConfigs: MutableList, + allKeyValues: MutableList + ) = runCatching { + val files = mutableListOf() + if (allConfigs.size != allKeyValues.size) SError.make("Invalid build arguments") + if (allConfigs.isEmpty()) return@runCatching files + clearGeneratedData(isClearAll = true) + allConfigs.forEachIndexed { index, configs -> + val keyValues = allKeyValues[index] + clearGeneratedData() + createTopClassSpec(configs) + keyValues.forEach { (key, value) -> + parseTypeSpec(key, value) + releaseParseTypeSpec() + }; files.add(buildTypeSpec().createJavaFile(ACCESSORS_PACKAGE_NAME)) + }; files + }.getOrElse { SError.make("Failed to generated accessors classes\n$it") } + + /** + * 获取参与编译的 Stub [JavaFile] 数组 + * @return [List]<[JavaFile]> + */ + internal val compileStubFiles get(): List { + val stubFiles = mutableListOf() + val iExtensionAccessorsFile = + TypeSpec.interfaceBuilder(IExtensionAccessors::class.java.simpleName) + .addModifiers(Modifier.PUBLIC) + .build().createJavaFile(IExtensionAccessors::class.java.packageName) + stubFiles.add(iExtensionAccessorsFile) + return stubFiles + } + + /** + * 获取扩展功能预置 [Class] + * @param name 名称 + * @return [String] + * @throws IllegalStateException 如果 [Class] 不存在 + */ + internal fun propertiesClass(name: String) = memoryExtensionClasses[name] ?: SError.make("Could not found class \"$name\"") +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/generator/PropertiesSourcesGenerator.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/generator/PropertiesSourcesGenerator.kt new file mode 100644 index 0000000..acae9ee --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/generator/PropertiesSourcesGenerator.kt @@ -0,0 +1,88 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/27. + */ +package com.highcapable.sweetproperty.plugin.generator + +import com.highcapable.sweetproperty.SweetProperty +import com.highcapable.sweetproperty.plugin.config.proxy.ISweetPropertyConfigs +import com.highcapable.sweetproperty.plugin.generator.factory.PropertyMap +import com.highcapable.sweetproperty.plugin.generator.factory.parseTypedValue +import com.highcapable.sweetproperty.utils.debug.SError +import com.highcapable.sweetproperty.utils.firstNumberToLetter +import com.highcapable.sweetproperty.utils.underscore +import com.squareup.kotlinpoet.FileSpec +import com.squareup.kotlinpoet.KModifier +import com.squareup.kotlinpoet.PropertySpec +import com.squareup.kotlinpoet.TypeSpec +import java.text.SimpleDateFormat +import java.util.* + +/** + * 属性键值代码生成实现类 + */ +internal class PropertiesSourcesGenerator { + + /** + * 生成 [FileSpec] + * @param configs 当前配置实例 + * @param keyValues 键值数组 + * @param packageName 包名 + * @param className 类名 + * @return [FileSpec] + * @throws IllegalStateException 如果生成失败 + */ + internal fun build( + configs: ISweetPropertyConfigs.ISourcesCodeGenerateConfigs, + keyValues: PropertyMap, + packageName: String, + className: String + ) = runCatching { + FileSpec.builder(packageName, className).apply { + addType(TypeSpec.objectBuilder(className).apply { + addKdoc( + """ + This class is generated by ${SweetProperty.TAG} at ${SimpleDateFormat.getDateTimeInstance().format(Date())} + + The content here is automatically generated according to the properties of your projects + + You can visit [here](${SweetProperty.PROJECT_URL}) for more help + """.trimIndent() + ) + if (configs.isEnableRestrictedAccess) addModifiers(KModifier.INTERNAL) + keyValues.forEach { (key, value) -> + val typedValue = value.parseTypedValue(configs.isEnableTypeAutoConversion) + addProperty(PropertySpec.builder(key.firstNumberToLetter().underscore(), typedValue.first).apply { + addKdoc("Resolve the \"$key\" value \"$value\"") + if (configs.isEnableRestrictedAccess) addModifiers(KModifier.INTERNAL) + addModifiers(KModifier.CONST) + initializer(typedValue.second.toKotlinPoetSpace()) + }.build()) + } + }.build()) + }.build() + }.getOrElse { SError.make("Failed to generated Kotlin file\n$it") } + + /** + * 转换到 KotlinPoet 声明的空格 + * @return [String] + */ + private fun String.toKotlinPoetSpace() = replace(" ", "·") +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/generator/factory/GeneratorFactory.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/generator/factory/GeneratorFactory.kt new file mode 100644 index 0000000..95c9533 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/generator/factory/GeneratorFactory.kt @@ -0,0 +1,51 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/27. + */ +package com.highcapable.sweetproperty.plugin.generator.factory + +import kotlin.reflect.KClass + +/** 属性键值数组类型定义 */ +internal typealias PropertyMap = MutableMap + +/** + * 解析到键值内容类型 + * @param isAutoConversion 是否自动转换类型 + * @return [Pair]<[KClass], [String]> + */ +internal fun Any.parseTypedValue(isAutoConversion: Boolean): Pair, String> { + val valueString = toString() + .replace("\n", "\\n") + .replace("\r", "\\r") + .replace("\\", "\\\\") + .replace("\"", "\\\"") + if (isAutoConversion.not()) return Pair(String::class, "\"$valueString\"") + val typeSpec = when { + valueString.trim().toIntOrNull() != null -> Int::class + valueString.trim().toLongOrNull() != null -> Long::class + valueString.trim().toDoubleOrNull() != null -> Double::class + valueString.trim().toFloatOrNull() != null -> Float::class + valueString.trim() == "true" || valueString.trim() == "false" -> Boolean::class + else -> String::class + }; return Pair(typeSpec, if (typeSpec == String::class) "\"$valueString\"" else valueString.let { + if (typeSpec == Long::class && it.endsWith("L").not()) "${it}L" else it + }) +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/helper/PropertiesDeployHelper.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/helper/PropertiesDeployHelper.kt new file mode 100644 index 0000000..baaab07 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/helper/PropertiesDeployHelper.kt @@ -0,0 +1,331 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/30. + */ +package com.highcapable.sweetproperty.plugin.helper + +import com.highcapable.sweetproperty.SweetProperty +import com.highcapable.sweetproperty.generated.SweetPropertyProperties +import com.highcapable.sweetproperty.gradle.entity.ProjectDescriptor +import com.highcapable.sweetproperty.gradle.factory.addDependencyToBuildScript +import com.highcapable.sweetproperty.gradle.factory.fullName +import com.highcapable.sweetproperty.gradle.factory.get +import com.highcapable.sweetproperty.gradle.factory.getOrCreate +import com.highcapable.sweetproperty.gradle.factory.hasExtension +import com.highcapable.sweetproperty.gradle.factory.loadBuildScriptClass +import com.highcapable.sweetproperty.plugin.config.factory.with +import com.highcapable.sweetproperty.plugin.config.proxy.ISweetPropertyConfigs +import com.highcapable.sweetproperty.plugin.config.type.GenerateLocationType +import com.highcapable.sweetproperty.plugin.generator.PropertiesAccessorsGenerator +import com.highcapable.sweetproperty.plugin.generator.PropertiesSourcesGenerator +import com.highcapable.sweetproperty.plugin.generator.factory.PropertyMap +import com.highcapable.sweetproperty.utils.camelcase +import com.highcapable.sweetproperty.utils.code.entity.MavenPomData +import com.highcapable.sweetproperty.utils.code.factory.compile +import com.highcapable.sweetproperty.utils.debug.SError +import com.highcapable.sweetproperty.utils.flatted +import com.highcapable.sweetproperty.utils.hasInterpolation +import com.highcapable.sweetproperty.utils.isEmpty +import com.highcapable.sweetproperty.utils.noBlank +import com.highcapable.sweetproperty.utils.noEmpty +import com.highcapable.sweetproperty.utils.parseFileSeparator +import com.highcapable.sweetproperty.utils.replaceInterpolation +import com.highcapable.sweetproperty.utils.uppercamelcase +import org.gradle.api.DomainObjectCollection +import org.gradle.api.Project +import org.gradle.api.initialization.Settings +import java.io.File +import java.io.FileReader +import java.util.* +import kotlin.properties.Delegates + +/** + * 属性键值部署工具类 + */ +internal object PropertiesDeployHelper { + + /** 属性键值可访问 [Class] 标识名称 */ + private const val ACCESSORS_NAME = "properties-accessors" + + /** 属性键值默认生成包名 */ + private const val DEFAULT_PACKAGE_NAME = "${SweetPropertyProperties.PROJECT_GROUP_NAME}.defaultproperties" + + /** 当前配置实例 */ + private var configs by Delegates.notNull() + + /** 当前缓存的属性键值数组 (初始化装载) */ + private var cachedSettingsProperties = mutableListOf() + + /** 当前缓存的属性键值数组 (每个项目) */ + private var cachedProjectProperties = mutableMapOf() + + /** 上次修改的 Hash Code */ + private var lastModifiedHashCode = 0 + + /** 配置是否已被修改 */ + private var isConfigsModified = true + + /** 属性键值可访问 [Class] 生成目录 */ + private var accessorsDir by Delegates.notNull() + + /** 属性键值可访问 [Class] 虚拟依赖数据 */ + private val accessorsPomData = MavenPomData(SweetPropertyProperties.PROJECT_GROUP_NAME, ACCESSORS_NAME, SweetProperty.VERSION) + + /** 属性键值可访问 [Class] 生成实例 */ + private val accessorsGenerator = PropertiesAccessorsGenerator() + + /** 属性键值代码生成实例 */ + private val sourcesGenerator = PropertiesSourcesGenerator() + + /** + * 装载并初始化 + * @param settings 当前设置 + * @param configs 当前配置 + */ + internal fun initialize(settings: Settings, configs: ISweetPropertyConfigs) { + this.configs = configs + checkingConfigsModified(settings) + if (configs.isEnable.not()) return + generatedAccessors(settings) + } + + /** + * 开始处理 + * @param rootProject 当前根项目 + */ + internal fun resolve(rootProject: Project) { + if (configs.isEnable.not()) return + resolveAccessors(rootProject) + } + + /** + * 开始部署 + * @param rootProject 当前根项目 + */ + internal fun deploy(rootProject: Project) { + if (configs.isEnable.not()) return + deployAccessors(rootProject) + deploySourcesCode(rootProject) + } + + /** + * 检查配置是否已被修改 + * @param settings 当前设置 + */ + private fun checkingConfigsModified(settings: Settings) { + settings.settingsDir.also { dir -> + val groovyHashCode = dir.resolve("settings.gradle").takeIf { it.exists() }?.readText()?.hashCode() + val kotlinHashCode = dir.resolve("settings.gradle.kts").takeIf { it.exists() }?.readText()?.hashCode() + val gradleHashCode = groovyHashCode ?: kotlinHashCode ?: -1 + isConfigsModified = gradleHashCode == -1 || lastModifiedHashCode != gradleHashCode + lastModifiedHashCode = gradleHashCode + } + } + + /** + * 生成构建脚本代码 + * @param settings 当前设置 + */ + private fun generatedAccessors(settings: Settings) { + accessorsDir = generatedAccessorsDir(settings) + val allConfigs = mutableListOf() + val allProperties = mutableListOf() + if (configs.global.buildScript.isEnable) { + allProperties.add(generatedProperties(configs.global.buildScript, ProjectDescriptor.create(settings))) + allConfigs.add(configs.global.buildScript) + } + configs.projects.forEach { (name, subConfigs) -> + if (subConfigs.buildScript.isEnable.not()) return@forEach + allProperties.add(generatedProperties(subConfigs.buildScript, ProjectDescriptor.create(settings, name))) + allConfigs.add(subConfigs.buildScript) + } + if (isConfigsModified.not() && allProperties == cachedSettingsProperties && accessorsDir.isEmpty().not()) return + cachedSettingsProperties = allProperties + accessorsGenerator.build(allConfigs, allProperties).compile(accessorsPomData, accessorsDir.absolutePath, accessorsGenerator.compileStubFiles) + } + + /** + * 处理构建脚本代码 + * @param rootProject 当前根项目 + */ + private fun resolveAccessors(rootProject: Project) { + if (accessorsDir.isEmpty().not()) rootProject.addDependencyToBuildScript(accessorsDir.absolutePath, accessorsPomData) + } + + /** + * 部署构建脚本代码 + * @param rootProject 当前根项目 + */ + private fun deployAccessors(rootProject: Project) { + /** 部署扩展方法 */ + fun Project.deploy() { + val configs = configs.with(this).buildScript + if (configs.isEnable.not()) return + getOrCreate(configs.extensionName.camelcase(), loadBuildScriptClass(accessorsGenerator.propertiesClass(configs.name))) + } + rootProject.deploy() + rootProject.subprojects.forEach { it.deploy() } + } + + /** + * 部署项目代码 + * @param rootProject 当前根项目 + */ + private fun deploySourcesCode(rootProject: Project) { + /** 生成代码 */ + fun Project.generate() { + val configs = configs.with(this).sourcesCode + 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 (configs.isEnable) configureSourceSets(project = this) + return + }; outputDir.apply { if (exists()) deleteRecursively() } + cachedProjectProperties[fullName] = properties + val packageName = generatedPackageName(configs, project = this) + val className = generatedClassName(configs, project = this) + sourcesGenerator.build(configs, properties, packageName, className).writeTo(outputDir) + configureSourceSets(project = this) + } + rootProject.generate() + rootProject.subprojects.forEach { it.afterEvaluate { generate() } } + } + + /** + * 配置项目 SourceSets + * @param project 当前项目 + */ + private fun configureSourceSets(project: Project) { + fun Project.deploySourceSets(name: String) = runCatching { + val extension = get(name) + val collection = extension.javaClass.getMethod("getSourceSets").invoke(extension) as DomainObjectCollection<*> + collection.configureEach { + val kotlin = javaClass.getMethod("getKotlin").invoke(this) + kotlin.javaClass.getMethod("srcDir", Any::class.java).invoke(kotlin, configs.with(project).sourcesCode.generateDirPath) + } + } + if (project.hasExtension("kotlin")) project.deploySourceSets(name = "kotlin") + if (project.hasExtension("android")) project.deploySourceSets(name = "android") + } + + /** + * 获取属性键值可访问 [Class] 生成目录 + * @param settings 当前设置 + * @return [File] + */ + private fun generatedAccessorsDir(settings: Settings) = + settings.rootDir.resolve(".gradle").resolve(SweetPropertyProperties.PROJECT_MODULE_NAME).resolve(ACCESSORS_NAME).apply { mkdirs() } + + /** + * 获取生成的属性键值数组 + * @param configs 当前配置 + * @param descriptor 当前描述 + * @return [PropertyMap] + */ + private fun generatedProperties(configs: ISweetPropertyConfigs.IBaseGenerateConfigs, descriptor: ProjectDescriptor): PropertyMap { + val propteries = mutableMapOf() + configs.permanentKeyValues.forEach { (key, value) -> propteries[key] = value } + configs.generateLocationTypes.forEach { + val nativeKeyValues = when (it) { + GenerateLocationType.CURRENT_PROJECT -> createProperties(configs, descriptor.currentDir) + GenerateLocationType.ROOT_PROJECT -> createProperties(configs, descriptor.rootDir) + GenerateLocationType.GLOBAL -> createProperties(configs, descriptor.homeDir) + GenerateLocationType.SYSTEM -> System.getProperties() + GenerateLocationType.SYSTEM_ENV -> System.getenv() + } ?: emptyMap() + val resolveKeyValues = mutableMapOf() + nativeKeyValues.forEach native@{ (key, value) -> + val hasExcludeKeys = configs.excludeKeys.noEmpty()?.any { content -> + when (content) { + is Regex -> content.toString().isNotBlank() && content.matches(key.toString()) + else -> content.toString() == key + } + } ?: false + if (hasExcludeKeys) return@native + val isAvailableKeyValue = if (configs.isEnableExcludeNonStringValue) + key is CharSequence && key.isNotBlank() && value is CharSequence + else key.toString().isNotBlank() && value != null + if (isAvailableKeyValue) resolveKeyValues[key.toString()] = value + } + resolveKeyValues.forEach { (key, value) -> + val resolveKeys = mutableListOf() + + /** + * 处理键值内容 + * @return [String] + */ + fun String.resolveValue(): String = replaceInterpolation { matchKey -> + if (resolveKeys.size > 5) SError.make("Key \"$key\" has been called recursively multiple times of those $resolveKeys") + resolveKeys.add(matchKey) + val resolveValue = if (configs.isEnableValueInterpolation) resolveKeyValues[matchKey]?.toString() ?: "" else matchKey + if (resolveValue.hasInterpolation()) resolveValue.resolveValue() + else resolveValue + } + if (value.toString().hasInterpolation()) resolveKeyValues[key] = value.toString().resolveValue() + }; propteries.putAll(resolveKeyValues) + }; return propteries + } + + /** + * 获取生成的包名 + * @param configs 当前配置 + * @param project 当前项目 + * @return [String] + */ + private fun generatedPackageName(configs: ISweetPropertyConfigs.ISourcesCodeGenerateConfigs, project: Project): String { + /** + * 获取 Android 项目的 "namespace" + * @return [String] or null + */ + fun Project.namespace() = runCatching { + val extension = get("android") + extension.javaClass.getMethod("getNamespace").invoke(extension) as String + }.getOrNull() + val packageName = configs.packageName.noBlank() + ?: project.namespace() + ?: project.group.toString().noBlank() + ?: "$DEFAULT_PACKAGE_NAME.${project.fullName.replace(":", "").flatted()}" + return "$packageName.generated" + } + + /** + * 获取生成的类名 + * @param configs 当前配置 + * @param project 当前项目 + * @return [String] + */ + private fun generatedClassName(configs: ISweetPropertyConfigs.ISourcesCodeGenerateConfigs, project: Project): String { + val className = configs.className.noBlank() + ?: project.fullName.replace(":", "_").uppercamelcase().noBlank() + ?: "Undefined" + return "${className.uppercamelcase()}Properties" + } + + /** + * 创建新的 [Properties] + * @param configs 当前配置 + * @param dir 当前目录 + * @return [Properties] or null + */ + private fun createProperties(configs: ISweetPropertyConfigs.IBaseGenerateConfigs, dir: File?) = runCatching { + Properties().apply { load(FileReader(dir?.resolve(configs.propertiesFileName)?.absolutePath?.parseFileSeparator() ?: "")) } + }.getOrNull() +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/FileFactory.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/FileFactory.kt new file mode 100644 index 0000000..5d45aac --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/FileFactory.kt @@ -0,0 +1,63 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/27. + */ +@file:Suppress("unused") + +package com.highcapable.sweetproperty.utils + +import java.io.File + +/** + * 字符串路径转换为文件 + * + * 自动调用 [parseFileSeparator] + * @return [File] + */ +internal fun String.toFile() = File(parseFileSeparator()) + +/** + * 格式化到当前操作系统的文件分隔符 + * @return [String] + */ +internal fun String.parseFileSeparator() = replace("/", File.separator).replace("\\", File.separator) + +/** + * 格式化到 Unix 操作系统的文件分隔符 + * @return [String] + */ +internal fun String.parseUnixFileSeparator() = replace("\\", "/") + +/** + * 检查目录是否为空 + * + * - 如果不是目录 (可能是文件) - 返回 true + * - 如果文件不存在 - 返回 true + * @return [Boolean] + */ +internal fun File.isEmpty() = exists().not() || isDirectory.not() || listFiles().isNullOrEmpty() + +/** 删除目录下的空子目录 */ +internal fun File.deleteEmptyRecursively() { + listFiles { file -> file.isDirectory }?.forEach { subDir -> + subDir.deleteEmptyRecursively() + if (subDir.listFiles()?.isEmpty() == true) subDir.delete() + } +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/VariableFactory.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/VariableFactory.kt new file mode 100644 index 0000000..d8b6cd0 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/VariableFactory.kt @@ -0,0 +1,110 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/26. + */ +package com.highcapable.sweetproperty.utils + +/** + * 当数组不为空时返回非空 + * @return [T] or null + */ +internal inline fun > T.noEmpty() = takeIf { it.isNotEmpty() } + +/** + * 当字符串不为空白时返回非空 + * @return [T] or null + */ +internal inline fun T.noBlank() = takeIf { it.isNotBlank() } + +/** + * 扁平化字符串处理 + * + * 移除所有空格并转换为小写字母 + * @return [String] + */ +internal fun String.flatted() = replace(" ", "").lowercase() + +/** + * 驼峰、"-"、"." 转大写下划线命名 + * @return [String] + */ +internal fun String.underscore() = replace(".", "_").replace("-", "_").replace(" ", "_").replace("([a-z])([A-Z]+)".toRegex(), "$1_$2").uppercase() + +/** + * 下划线、分隔线、点、空格命名字符串转小驼峰命名字符串 + * @return [String] + */ +internal fun String.camelcase() = runCatching { + split("_", ".", "-", " ").map { it.replaceFirstChar { e -> e.titlecase() } }.let { words -> + words.first().replaceFirstChar { it.lowercase() } + words.drop(1).joinToString("") + } +}.getOrNull() ?: this + +/** + * 下划线、分隔线、点、空格命名字符串转大驼峰命名字符串 + * @return [String] + */ +internal fun String.uppercamelcase() = camelcase().capitalize() + +/** + * 字符串首字母大写 + * @return [String] + */ +internal fun String.capitalize() = replaceFirstChar { it.uppercaseChar() } + +/** + * 字符串首字母小写 + * @return [String] + */ +internal fun String.uncapitalize() = replaceFirstChar { it.lowercaseChar() } + +/** + * 转换字符串第一位数字到外观近似大写字母 + * @return [String] + */ +internal fun String.firstNumberToLetter() = + if (isNotBlank()) (mapOf( + '0' to 'O', '1' to 'I', + '2' to 'Z', '3' to 'E', + '4' to 'A', '5' to 'S', + '6' to 'G', '7' to 'T', + '8' to 'B', '9' to 'P' + )[first()] ?: first()) + substring(1) + else this + +/** + * 转换字符串为非 Java 关键方法引用名称 + * @return [String] + */ +internal fun String.toNonJavaName() = if (lowercase() == "class") replace("lass", "lazz") else this + +/** + * 字符串中是否存在插值符号 ${...} + * @return [Boolean] + */ +internal fun String.hasInterpolation() = contains("\${") && contains("}") + +/** + * 替换字符串中的插值符号 ${...} + * @param result 回调结果 + * @return [String] + */ +internal fun String.replaceInterpolation(result: (groupValue: String) -> CharSequence) = + "\\$\\{(.+?)}".toRegex().replace(this) { result(it.groupValues[1]) } \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/code/CodeCompiler.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/code/CodeCompiler.kt new file mode 100644 index 0000000..09b71ab --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/code/CodeCompiler.kt @@ -0,0 +1,192 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/27. + */ +package com.highcapable.sweetproperty.utils.code + +import com.highcapable.sweetproperty.utils.code.entity.MavenPomData +import com.highcapable.sweetproperty.utils.debug.SError +import com.highcapable.sweetproperty.utils.deleteEmptyRecursively +import com.highcapable.sweetproperty.utils.parseFileSeparator +import com.highcapable.sweetproperty.utils.toFile +import java.io.File +import java.util.jar.JarEntry +import java.util.jar.JarOutputStream +import javax.tools.DiagnosticCollector +import javax.tools.JavaFileObject +import javax.tools.StandardLocation +import javax.tools.ToolProvider + +/** + * 代码编译处理类 + */ +internal object CodeCompiler { + + /** Maven 模型版本 */ + private const val MAVEN_MODEL_VERSION = "4.0.0" + + /** + * 编译 [JavaFileObject] 为 Maven 依赖 + * @param pomData Maven POM 实体 + * @param outputDirPath 编译输出目录路径 + * @param files [JavaFileObject] 数组 + * @param compileOnlyFiles [JavaFileObject] 仅编译数组 - 默认空 + * @throws IllegalStateException 如果编译失败 + */ + internal fun compile( + pomData: MavenPomData, + outputDirPath: String, + files: List, + compileOnlyFiles: List = mutableListOf() + ) { + val outputDir = outputDirPath.toFile() + if (files.isEmpty()) { + if (outputDir.exists()) outputDir.deleteRecursively() + return + } else outputDir.also { if (it.exists().not()) it.mkdirs() } + val outputBuildDir = "$outputDirPath/build".toFile().also { if (it.exists()) it.deleteRecursively(); it.mkdirs() } + val outputClassesDir = "${outputBuildDir.absolutePath}/classes".toFile().apply { mkdirs() } + val outputSourcesDir = "${outputBuildDir.absolutePath}/sources".toFile().apply { mkdirs() } + val compiler = ToolProvider.getSystemJavaCompiler() + val diagnostics = DiagnosticCollector() + val fileManager = compiler.getStandardFileManager(diagnostics, null, null) + fileManager.setLocation(StandardLocation.CLASS_OUTPUT, listOf(outputClassesDir)) + val task = compiler.getTask(null, fileManager, diagnostics, null, null, compileOnlyFiles + files) + val result = task.call() + var diagnosticsMessage = "" + diagnostics.diagnostics?.forEach { diagnostic -> + diagnosticsMessage += " > Error on line ${diagnostic.lineNumber} in ${diagnostic.source?.toUri()}\n" + diagnosticsMessage += " ${diagnostic.getMessage(null)}\n" + } + runCatching { fileManager.close() } + if (result) { + compileOnlyFiles.forEach { "${outputClassesDir.absolutePath}/${it.name}".replace(".java", ".class").toFile().delete() } + files.forEach { + it.toFiles(outputSourcesDir).also { (sourceDir, sourceFile) -> + sourceDir.mkdirs() + sourceFile.writeText(it.getCharContent(true).toString()) + } + }; outputClassesDir.deleteEmptyRecursively() + writeMetaInf(outputClassesDir.absolutePath) + writeMetaInf(outputSourcesDir.absolutePath) + createJarAndPom(pomData, outputDir, outputBuildDir, outputClassesDir, outputSourcesDir) + } else SError.make("Failed to compile java files into path: $outputDirPath\n$diagnosticsMessage") + } + + /** + * 打包 JAR 并写入 POM + * @param pomData Maven POM 实体 + * @param outputDir 编译输出目录 + * @param buildDir 编译目录 + * @param classesDir 编译二进制目录 + * @param sourcesDir 编译源码目录 + */ + private fun createJarAndPom(pomData: MavenPomData, outputDir: File, buildDir: File, classesDir: File, sourcesDir: File) { + val pomPath = "${pomData.groupId.toPomPathName()}/${pomData.artifactId}/${pomData.version}" + val pomDir = "${outputDir.absolutePath}/$pomPath".toFile().also { if (it.exists().not()) it.mkdirs() } + packageToJar(classesDir, pomDir, pomData, isSourcesJar = false) + packageToJar(sourcesDir, pomDir, pomData, isSourcesJar = true) + writePom(pomDir.absolutePath, pomData) + buildDir.deleteRecursively() + } + + /** + * 写入 META-INF/MANIFEST.MF + * @param dirPath 当前目录路径 + */ + private fun writeMetaInf(dirPath: String) { + val metaInfFile = "$dirPath/META-INF".toFile().apply { mkdirs() } + "${metaInfFile.absolutePath}/MANIFEST.MF".toFile().writeText("Manifest-Version: 1.0") + } + + /** + * 写入 POM + * @param dirPath 当前目录路径 + * @param pomData Maven POM 实体 + */ + private fun writePom(dirPath: String, pomData: MavenPomData) = + "$dirPath/${pomData.artifactId}-${pomData.version}.pom".toFile().writeText( + """ + + + $MAVEN_MODEL_VERSION + ${pomData.groupId} + ${pomData.artifactId} + ${pomData.version} + + """.trimIndent() + ) + + /** + * 转换到 [MavenPomData] 目录名称 + * @return [String] + */ + private fun String.toPomPathName() = trim().replace(".", "/").replace("_", "/").replace(":", "/").replace("-", "/") + + /** + * 转换到文件 + * @param outputDir 输出目录 + * @return [Pair]<[File], [File]> + */ + private fun JavaFileObject.toFiles(outputDir: File): Pair { + val outputDirPath = outputDir.absolutePath + val separator = if (name.contains("/")) "/" else "\\" + val names = name.split(separator) + val fileName = names[names.lastIndex] + val folderName = name.replace(fileName, "") + return "$outputDirPath/$folderName".toFile() to "$outputDirPath/$name".toFile() + } + + /** + * 打包编译输出目录到 JAR + * @param buildDir 编译目录 + * @param outputDir 输出目录 + * @param pomData Maven POM 实体 + * @param isSourcesJar 是否为源码 JAR + * @throws IllegalStateException 如果编译输出目录不存在 + */ + private fun packageToJar(buildDir: File, outputDir: File, pomData: MavenPomData, isSourcesJar: Boolean) { + if (buildDir.exists().not()) SError.make("Jar file output path not found: ${buildDir.absolutePath}") + /** + * 添加文件到 JAR + * @param jos 当前输出流 + * @param parentPath 父级路径 + */ + fun File.addToJar(jos: JarOutputStream, parentPath: String = "") { + val currentPath = "$parentPath$name".replace("${buildDir.name}|", "").replace("|", "/").parseFileSeparator() + if (isFile) { + if (name.startsWith(".")) return + jos.putNextEntry(JarEntry(currentPath)) + inputStream().use { fis -> + val buffer = ByteArray(4096) + var bytesRead: Int + while (fis.read(buffer).also { bytesRead = it } != -1) jos.write(buffer, 0, bytesRead) + } + jos.closeEntry() + } else listFiles()?.forEach { it.addToJar(jos, parentPath = "$currentPath|") } + } + val jarFile = "${outputDir.absolutePath}/${pomData.artifactId}-${pomData.version}${if (isSourcesJar) "-sources" else ""}.jar".toFile() + if (jarFile.exists()) jarFile.delete() + jarFile.outputStream().use { fos -> JarOutputStream(fos).use { jos -> buildDir.addToJar(jos) } } + } +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/code/entity/MavenPomData.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/code/entity/MavenPomData.kt new file mode 100644 index 0000000..28452f5 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/code/entity/MavenPomData.kt @@ -0,0 +1,30 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/27. + */ +package com.highcapable.sweetproperty.utils.code.entity + +/** + * Maven POM 实体 + * @param groupId Group ID + * @param artifactId Artifact Id + * @param version 版本 + */ +internal data class MavenPomData(internal val groupId: String, internal val artifactId: String, internal val version: String) \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/code/factory/CodeCompilerFactory.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/code/factory/CodeCompilerFactory.kt new file mode 100644 index 0000000..a571d4f --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/code/factory/CodeCompilerFactory.kt @@ -0,0 +1,83 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/27. + */ +@file:Suppress("unused") + +package com.highcapable.sweetproperty.utils.code.factory + +import com.highcapable.sweetproperty.utils.code.CodeCompiler +import com.highcapable.sweetproperty.utils.code.entity.MavenPomData +import com.squareup.javapoet.JavaFile +import javax.tools.JavaFileObject + +/** + * 编译 [JavaFile] 为 Maven 依赖 + * @param pomData Maven POM 实体 + * @param outputDirPath 编译输出目录路径 + * @param compileOnlyFiles [JavaFile] 仅编译数组 - 默认空 + * @throws IllegalStateException 如果编译失败 + */ +@JvmName("compileWithJavaFile") +internal fun JavaFile.compile(pomData: MavenPomData, outputDirPath: String, compileOnlyFiles: List = mutableListOf()) = + CodeCompiler.compile( + pomData = pomData, + outputDirPath = outputDirPath, + files = listOf(toJavaFileObject()), + compileOnlyFiles = mutableListOf().also { compileOnlyFiles.forEach { e -> it.add(e.toJavaFileObject()) } } + ) + +/** + * 编译 [JavaFile] 为 Maven 依赖 + * @param pomData Maven POM 实体 + * @param outputDirPath 编译输出目录路径 + * @param compileOnlyFiles [JavaFile] 仅编译数组 - 默认空 + * @throws IllegalStateException 如果编译失败 + */ +@JvmName("compileWithJavaFile") +internal fun List.compile(pomData: MavenPomData, outputDirPath: String, compileOnlyFiles: List = mutableListOf()) = + CodeCompiler.compile( + pomData = pomData, + outputDirPath = outputDirPath, + files = mutableListOf().also { forEach { e -> it.add(e.toJavaFileObject()) } }, + compileOnlyFiles = mutableListOf().also { compileOnlyFiles.forEach { e -> it.add(e.toJavaFileObject()) } } + ) + +/** + * 编译 [JavaFileObject] 为 Maven 依赖 + * @param pomData Maven POM 实体 + * @param outputDirPath 编译输出目录路径 + * @param compileOnlyFiles [JavaFileObject] 仅编译数组 - 默认空 + * @throws IllegalStateException 如果编译失败 + */ +@JvmName("compileWithJavaFileObject") +internal fun JavaFileObject.compile(pomData: MavenPomData, outputDirPath: String, compileOnlyFiles: List = mutableListOf()) = + CodeCompiler.compile(pomData, outputDirPath, listOf(this), compileOnlyFiles) + +/** + * 编译 [JavaFileObject] 为 Maven 依赖 + * @param pomData Maven POM 实体 + * @param outputDirPath 编译输出目录路径 + * @param compileOnlyFiles [JavaFileObject] 仅编译数组 - 默认空 + * @throws IllegalStateException 如果编译失败 + */ +@JvmName("compileWithJavaFileObject") +internal fun List.compile(pomData: MavenPomData, outputDirPath: String, compileOnlyFiles: List = mutableListOf()) = + CodeCompiler.compile(pomData, outputDirPath, files = this, compileOnlyFiles) \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/debug/SError.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/debug/SError.kt new file mode 100644 index 0000000..9982fc8 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/debug/SError.kt @@ -0,0 +1,37 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/27. + */ +package com.highcapable.sweetproperty.utils.debug + +import com.highcapable.sweetproperty.SweetProperty + +/** + * 全局异常管理类 + */ +internal object SError { + + /** + * 抛出异常 + * @param msg 消息内容 + * @throws IllegalStateException + */ + internal fun make(msg: String): Nothing = error("[${SweetProperty.TAG}] $msg") +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/debug/SLog.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/debug/SLog.kt new file mode 100644 index 0000000..3c713ad --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/utils/debug/SLog.kt @@ -0,0 +1,38 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/27. + */ +@file:Suppress("unused") + +package com.highcapable.sweetproperty.utils.debug + +import com.highcapable.sweetproperty.SweetProperty + +/** + * 全局 Log 管理类 + */ +internal object SLog { + + /** + * 打印 Log + * @param msg 消息内容 + */ + internal fun log(msg: String) = println("[${SweetProperty.TAG}] $msg") +} \ No newline at end of file diff --git a/sweetproperty-gradle-plugin/src/main/java/org/gradle/kotlin/dsl/SweetPropertySettingsExtensionFactory.kt b/sweetproperty-gradle-plugin/src/main/java/org/gradle/kotlin/dsl/SweetPropertySettingsExtensionFactory.kt new file mode 100644 index 0000000..4859b18 --- /dev/null +++ b/sweetproperty-gradle-plugin/src/main/java/org/gradle/kotlin/dsl/SweetPropertySettingsExtensionFactory.kt @@ -0,0 +1,51 @@ +/* + * SweetProperty - An easy get project properties anywhere Gradle plugin + * Copyright (C) 2019-2023 HighCapable + * https://github.com/HighCapable/SweetProperty + * + * Apache License Version 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is Created by fankes on 2023/8/27. + */ +@file:Suppress("unused") + +package org.gradle.kotlin.dsl + +import com.highcapable.sweetproperty.gradle.factory.configure +import com.highcapable.sweetproperty.gradle.factory.get +import com.highcapable.sweetproperty.plugin.extension.dsl.configure.SweetPropertyConfigureExtension +import org.gradle.api.Action +import org.gradle.api.initialization.Settings + +/** + * WORKAROUND: for some reason a type-safe accessor is not generated for the extension, + * even though it is present in the extension container where the plugin is applied. + * This seems to work fine, and the extension methods are only available when the plugin + * is actually applied. + * + * See related link [here](https://stackoverflow.com/questions/72627792/gradle-settings-plugin-extension) + */ + +/** + * Retrieves the [SweetPropertyConfigureExtension] extension. + * @return [SweetPropertyConfigureExtension] + */ +val Settings.sweetProperty get() = get(SweetPropertyConfigureExtension.NAME) + +/** + * Configures the [SweetPropertyConfigureExtension] extension. + * @param configure + */ +fun Settings.sweetProperty(configure: Action) = configure(SweetPropertyConfigureExtension.NAME, configure) \ No newline at end of file