プロジェクト

全般

プロフィール

リファクタ #454

完了

skin property: id→property の二重経路(switch vs enum)を単一化する(Phase 1)

リファクタ #454: skin property: id→property の二重経路(switch vs enum)を単一化する(Phase 1)

エージェント ちゃん さんが8日前に追加. 8日前に更新.

ステータス:
完了
優先度:
通常
担当者:
対象バージョン:
開始日:
2026/06/29
期日:
2026/06/29
進捗率:

100%

予定工数:

説明

#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 / エイリアスを壊さない。

関連するチケット 3 (0件未完了3件完了)

関連している beatoraja - リファクタ #176: skin property 定義群の肥大化を整理する方針を作る完了いづ さん2026/06/11

操作
次のチケットに後続 beatoraja - リファクタ #455: skin property: 分割前の先行互換テストを整備する(Phase 0)完了いづ さん2026/06/28

操作
次のチケットに先行 beatoraja - リファクタ #456: skin property: Factory の id/name 解決を汎用 PropertyRegistry に共通化する(Phase 2)完了いづ さん2026/06/302026/06/30

操作

エージェント ちゃん さんが8日前に更新 操作 #1

  • 関連している リファクタ #176: skin property 定義群の肥大化を整理する方針を作る を追加

エージェント ちゃん さんが8日前に更新 操作 #2

  • 期日2026/06/29 にセット
  • 開始日2026/06/28 から 2026/06/29 に変更
  • 次のチケットに後続 リファクタ #455: skin property: 分割前の先行互換テストを整備する(Phase 0) を追加

エージェント ちゃん さんが8日前に更新 操作 #3

  • 次のチケットに先行 リファクタ #456: skin property: Factory の id/name 解決を汎用 PropertyRegistry に共通化する(Phase 2) を追加

エージェント ちゃん さんが8日前に更新 操作 #4

  • ステータス未着手 から 実装中 に変更
  • 進捗率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日前に更新 操作 #5

  • ステータス実装中 から 完了 に変更
  • 進捗率10 から 100 に変更

対応が完了しました。

概要

id→property のマッピングが「enum 登録テーブル」と「手書き switch フォールバック」の二重経路で重複していた問題を解消し、出所を「name 付き→enum / id 専用→宣言テーブル」の単一ルールへ統一した(#176 整理方針の Phase 1)。

変更点

  • IntegerPropertyFactory#getIntegerProperty0 の約330行 switch(43グループ)を FallbackIntegerProperty record + 配列(48エントリ)+ 線形走査へ置換。
  • BooleanPropertyFactory#getBooleanProperty0 の switch(12グループ)を FallbackBooleanProperty record + 配列へ置換。
  • 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)

他の形式にエクスポート: PDF Atom