はじめに
最近、Composeを使った画面実装でBoxやBoxWithConstraintsを利用している箇所に、次のような警告が表示されるケースがありました。
Calling a androidx.compose.ui.UiComposable composable function
where a UI Composable composable was expected
一見すると修正が必要そうに見える警告ですが、調べてみたところCompose Compiler側の既知の誤検知であることが分かりました。
そこでこの記事ではこの警告の正体と、現時点での対応方針をまとめておきたいと思います。
発生している警告について
対象となるのは、主に以下のようなケースです。
-
Box/BoxWithConstraintsを使ったレイアウト - 特定のCompose Compilerバージョンを利用している環境
- 実装自体は正しく、実行時の挙動にも問題がない状態
にもかかわらず、IDE上で上記の警告が表示されます。
調査結果
今回の警告について調べたところ、Compose Compilerの既知の問題として報告済みであることが分かりました。
JetBrains YouTrackにも同様のIssueが登録されています。
- JetBrains YouTrack: CMP-8600
https://youtrack.jetbrains.com/issue/CMP-8600
Issueの内容を見る限り、
- 実装ミスではない
- 実行時の動作に影響はない
- Compiler側の解析による誤検知
という扱いになっており、Compose側での修正待ちという認識で問題なさそうです。
現時点での対応方針
今回の警告は実行時の挙動に影響がないため、当面は警告を抑制する対応を取ることにしました。
具体的には、該当箇所に以下を付与しています。
@Suppress("COMPOSE_APPLIER_CALL_MISMATCH")
- 意図しない警告を抑制できる
- 実装自体を変更する必要はない
- 修正が入った際に外せる対応
あくまで一時的な対応とし、Compose側で修正が入ったタイミングで外す予定です。
まとめ
今回の警告については、
- Compose Compiler による既知の誤検知
- 実行時の動作には影響なし
- Issue 登録済みで修正待ちの状態
という整理になります。
警告自体は少し不安になりますが、現時点では過剰にコードを直す必要はなく、抑制対応で十分と判断しています。
さいごに
IDEやCompilerのアップデートに伴って、こうした「実害はないが気になる警告」に遭遇することは時々あります。
Issueの状況を確認しつつ、影響範囲を見極めて対応するのが大事だなと改めて感じました。