操作
リファクタ #454
完了skin property: id→property の二重経路(switch vs enum)を単一化する(Phase 1)
リファクタ #454:
skin property: id→property の二重経路(switch vs enum)を単一化する(Phase 1)
説明
#176 の整理方針に基づく Phase 1。Phase 0(先行テスト整備)完了後に着手する。
背景¶
id → property のマッピングが 2 形態 で重複していることが肥大化・不整合の主因:
- enum 登録テーブル(
ValueType/BooleanTypeなど(id, name, lambda)) - 手書き switch フォールバック(
IntegerPropertyFactory#getIntegerProperty0/BooleanPropertyFactory#getBooleanProperty0)
新規エントリはどちらにも追加できるため、二重経路が肥大化を助長している。
対応内容¶
-
getIntegerProperty0/getBooleanProperty0の switch case を enum 登録(または単一の宣言テーブル)へ 小バッチで 移行し、id→property の真实の出所を 1 つにする。 - name を持たない(LR2 数値専用の)エントリの扱いを明確化する(name 空文字許容 or 別テーブル)。
確認観点¶
- 1 バッチごとに #(Phase 0 チケット) で追加した registry テスト・ゴールデンテストを green に保つ。
- id 値・name 文字列は JSON / LR2 / Lua の公開契約なので一切変えない(typo 名も保持)。
- 意図的な重複 id / エイリアスを壊さない。
エージェント ちゃん さんが8日前に更新
- 関連している リファクタ #176: skin property 定義群の肥大化を整理する方針を作る を追加
エージェント ちゃん さんが8日前に更新
- 期日 を 2026/06/29 にセット
- 開始日 を 2026/06/28 から 2026/06/29 に変更
- 次のチケットに後続 リファクタ #455: skin property: 分割前の先行互換テストを整備する(Phase 0) を追加
エージェント ちゃん さんが8日前に更新
- 次のチケットに先行 リファクタ #456: skin property: Factory の id/name 解決を汎用 PropertyRegistry に共通化する(Phase 2) を追加
エージェント ちゃん さんが8日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/454 - 対応方針:
getIntegerProperty0/getBooleanProperty0の手書き switch フォールバックを、id→property の宣言テーブル(LR2 数値専用で公開 name を持たないためValueType等の enum とは別テーブル)へ置換し、id→property の出所を「name 付き=enum / id 専用=宣言テーブル」の単一ルールへ統一する。id 値・name 文字列・エイリアス id は一切変えず、Phase 0(#455)の互換テストを green に保つ。
エージェント ちゃん さんが8日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
id→property のマッピングが「enum 登録テーブル」と「手書き switch フォールバック」の二重経路で重複していた問題を解消し、出所を「name 付き→enum / id 専用→宣言テーブル」の単一ルールへ統一した(#176 整理方針の Phase 1)。
変更点¶
-
IntegerPropertyFactory#getIntegerProperty0の約330行 switch(43グループ)をFallbackIntegerPropertyrecord + 配列(48エントリ)+ 線形走査へ置換。 -
BooleanPropertyFactory#getBooleanProperty0の switch(12グループ)をFallbackBooleanPropertyrecord + 配列へ置換。 - LR2 数値専用で公開 name を持たないため enum(ValueType / BooleanType)とは別テーブルとし、JSON/LR2/Lua の name 契約を変えず新規 name も露出させない。
- エイリアス(複数 id→1 property、13グループ)は
int[] idsで表現し同一 property インスタンスを共有。ラムダ本体・id・name・評価順序は一字一句保持。OPTION_COURSE_STAGE*範囲ハンドラは非変更。 - 変更ファイル:
IntegerPropertyFactory.java/BooleanPropertyFactory.java/ 新規SkinPropertyFallbackTableAliasTest.javaの 3 件。
テスト¶
-
.\gradlew.bat test --tests "...skin.property.*": 成功。Phase 0(#455)の安全網SkinPropertyFallbackResolutionTest(87)・SkinPropertyFactoryRegistryTest(848)・SkinPropertyArithmeticRangeTest(135)・DefaultSkinPropertyContractTest(1) ほか全 green。新規エイリアステスト 1 件通過。compileJava/compileTestJavaも成功。
関連 MR¶
- !129 (feature/454 → develop)
操作