Răsfoiți Sursa

chore: 扩展非 ViewModel UI DAO 护栏

5151561 3 luni în urmă
părinte
comite
a819405d5a
1 a modificat fișierele cu 53 adăugiri și 1 ștergeri
  1. 53 1
      build.gradle.kts

+ 53 - 1
build.gradle.kts

@@ -21,6 +21,9 @@ abstract class VerifyConfigArchitectureTask : DefaultTask() {
     @get:Input
     abstract val legacyDaoInjectionBaseline: MapProperty<String, Int>
 
+    @get:Input
+    abstract val legacyUiDaoAccessBaseline: MapProperty<String, Int>
+
     @TaskAction
     fun verify() {
         val sourceRootDir = sourceRoot.get().asFile
@@ -29,6 +32,7 @@ abstract class VerifyConfigArchitectureTask : DefaultTask() {
             .toList()
         val preferenceBaseline = legacyPreferenceCallBaseline.get()
         val daoInjectionBaseline = legacyDaoInjectionBaseline.get()
+        val uiDaoAccessBaseline = legacyUiDaoAccessBaseline.get()
         val violations = mutableListOf<String>()
         val forbiddenConfigImport = Regex(
             """^import io\.legado\.app\.(?:help\.config\.AppConfig|ui\.config\..*Config)$""",
@@ -124,6 +128,19 @@ abstract class VerifyConfigArchitectureTask : DefaultTask() {
                     violations += "$displayPath: 已减少 DAO 直连,请将基线从 $allowedDaoDependencies 下调到 $daoDependencies"
                 }
             }
+
+            if (relativePath.startsWith("io/legado/app/ui/") &&
+                !file.name.contains("ViewModel")
+            ) {
+                val daoDependencies = daoImport.findAll(text).count() +
+                    appDbDaoAccess.findAll(text).count()
+                val allowedDaoDependencies = uiDaoAccessBaseline[relativePath] ?: 0
+                if (daoDependencies > allowedDaoDependencies) {
+                    violations += "$displayPath: UI 层新增了 ${daoDependencies - allowedDaoDependencies} 个 DAO 直连"
+                } else if (daoDependencies < allowedDaoDependencies) {
+                    violations += "$displayPath: 已减少 DAO 直连,请将基线从 $allowedDaoDependencies 下调到 $daoDependencies"
+                }
+            }
         }
 
         val sourcePaths = kotlinFiles.mapTo(hashSetOf()) {
@@ -132,6 +149,9 @@ abstract class VerifyConfigArchitectureTask : DefaultTask() {
         (daoInjectionBaseline.keys - sourcePaths).forEach { relativePath ->
             violations += "app/src/main/java/$relativePath: 文件已移除,请删除 DAO 直连基线"
         }
+        (uiDaoAccessBaseline.keys - sourcePaths).forEach { relativePath ->
+            violations += "app/src/main/java/$relativePath: 文件已移除,请删除 UI DAO 直连基线"
+        }
 
         check(violations.isEmpty()) {
             violations.joinToString(prefix = "配置架构护栏失败:\n", separator = "\n")
@@ -168,7 +188,7 @@ val verifyConfigArchitecture = tasks.register<VerifyConfigArchitectureTask>(
     "verifyConfigArchitecture"
 ) {
     group = "verification"
-    description = "禁止配置架构回退、ViewModel 新增 DAO 直连和新增旧偏好调用"
+    description = "禁止配置架构回退、UI 层(ViewModel 及其它)新增 DAO 直连和新增旧偏好调用"
     sourceRoot.set(layout.projectDirectory.dir("app/src/main/java"))
     legacyPreferenceCallBaseline.set(
         mapOf(
@@ -214,6 +234,38 @@ val verifyConfigArchitecture = tasks.register<VerifyConfigArchitectureTask>(
             "io/legado/app/ui/tagGroupRule/TagGroupRuleViewModel.kt" to 4,
         )
     )
+    // 非 ViewModel 的 UI 层文件直连 DAO 的历史债,只冻结不修复;
+    // 清理时逐条下调/删除。护栏会自动要求"减少了就下调基线",防止回退。
+    legacyUiDaoAccessBaseline.set(
+        mapOf(
+            "io/legado/app/ui/association/AddToBookshelfDialog.kt" to 5,
+            "io/legado/app/ui/association/ImportBookSourceDialog.kt" to 1,
+            "io/legado/app/ui/association/ImportReplaceRuleDialog.kt" to 1,
+            "io/legado/app/ui/association/ImportRssSourceDialog.kt" to 1,
+            "io/legado/app/ui/book/audio/AudioPlayActivity.kt" to 1,
+            "io/legado/app/ui/book/bookmark/BookmarkDialog.kt" to 2,
+            "io/legado/app/ui/book/changesource/ChangeBookSourceDialog.kt" to 1,
+            "io/legado/app/ui/book/group/GroupManageDialog.kt" to 2,
+            "io/legado/app/ui/book/group/GroupSelectDialog.kt" to 1,
+            "io/legado/app/ui/book/manga/ReadMangaActivity.kt" to 1,
+            "io/legado/app/ui/book/read/ReadBookController.kt" to 3,
+            "io/legado/app/ui/book/read/page/provider/TextChapterLayout.kt" to 1,
+            "io/legado/app/ui/book/search/SearchScope.kt" to 4,
+            "io/legado/app/ui/book/search/SearchScopeDialog.kt" to 3,
+            "io/legado/app/ui/book/source/debug/BookSourceDebugModel.kt" to 1,
+            "io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt" to 1,
+            "io/legado/app/ui/book/source/manage/BookSourceActivity.kt" to 10,
+            "io/legado/app/ui/book/source/manage/GroupManageDialog.kt" to 1,
+            "io/legado/app/ui/config/bookshelfConfig/BookshelfManageScreenConfig.kt" to 1,
+            "io/legado/app/ui/main/MainNavGraph.kt" to 2,
+            "io/legado/app/ui/rss/article/RssArticlesCompose.kt" to 1,
+            "io/legado/app/ui/rss/read/RssJsExtensions.kt" to 8,
+            "io/legado/app/ui/rss/source/debug/RssSourceDebugModel.kt" to 1,
+            "io/legado/app/ui/widget/dialog/BottomWebViewDialog.kt" to 1,
+            "io/legado/app/ui/widget/keyboard/KeyboardAssistsConfig.kt" to 7,
+            "io/legado/app/ui/widget/keyboard/KeyboardToolPop.kt" to 1,
+        )
+    )
 }
 
 subprojects {