專案

一般

配置概況

動作

Bug #276

進行中
SC

修正 T2-06a core location 型別不一致編譯錯誤(CI 首跑抓出)

Bug #276: 修正 T2-06a core location 型別不一致編譯錯誤(CI 首跑抓出)

是由 Sashiba Chou約 2 個月 前加入.

狀態:
New
優先權:
Normal
被分派者:
-
開始日期:
2026-06-09
完成日期:
完成比例:

0%

預估工時:

概述

修正 T2-06a core module location 型別不一致導致的編譯錯誤(CI 首跑抓出)

背景

T2-06a(Feature #270)交付的 android/core 53 個單元測試,因本機與 Windows host 皆無 JDK 從未實際編譯。本專案於 Feature #272 加入 GitHub Actions CI(JDK 17 + Gradle 8.7)後,CI 首跑即在編譯階段失敗——這正是當初導入 CI 的目的:在無本機 JDK 的情況下,由雲端環境抓出程式問題。

本票修正該編譯錯誤。

根因

location 欄位在三處對「未觀測」語意的型別認知不一致:

位置 原本 問題
TriageRecord.location(model) FieldState<Location>? 設計原意:外層 null = 未觀測,內層必為實值
MergeStrategyRegistry init LWW_HLC<Location?>() 註冊成內層可空,與 model 不符
TriageRecordMerger 合併段 FieldState<Location?>? 跟著 registry 用內層可空,assemble 回 local.copy(location=…) 時型別對不上

Kotlin 編譯器報 5 處 Type mismatch: FieldState<Location> vs FieldState<Location?>TriageRecordMerger.kt:125,126,127,167)。

本質:「未觀測」只該由外層 nullFieldState<Location>?)表達;內層再套一層 Location? 是多餘的雙重 null,registry 當初註冊錯誤。

變更內容

統一對齊到 FieldState<Location>?(內層非空):

  • MergeStrategyRegistry.ktLWW_HLC<Location?>()LWW_HLC<Location>()
  • TriageRecordMerger.kt
  • registry.get<Location?>("location")registry.get<Location>("location")
  • mergedLocation: FieldState<Location?>?FieldState<Location>?
  • both-non-null 分支改用 local.location!!, remote.location!!(該 when 分支前已排除兩者為 null,!! 安全且避免依賴跨分支 smart-cast)
  • 更新註解,說明內層非空的設計理由

TestFixtures.ktlocation: Location? = null 為 builder 原始值參數(非 FieldState 包裝),透過 location?.let { FieldState(it, …) } 組出 FieldState<Location>?,已與新型別一致,無需修改。

驗收標準

  • CI android-core-tests 通過 :core:compileKotlin(不再有 Type mismatch)
  • CI 進入並完成 :core:test,53 個測試首次真正執行
  • 編譯過後測試仍可能有 assertion 失敗(此前從未跑過);若紅則依報告續修,屬正常 PoC 驗證流程

後續

  • 測試報告 artifact 可於 Actions 頁下載檢視
  • 全綠後 → T2-06a 正式驗收通過 → 進 T2-06b(Room 持久化層)

沒有任何資料可供顯示

動作

匯出至 PDF Atom