Skip to main content

v2026.09.09 Release

· One min read
Redex Team
Redex Team

Optimizations​

  • Constant propagation recognizes Class.isInstance invoked on a class literal and replaces it with an instance-of check, avoiding the reflective-call overhead.
  • The enum <clinit> analysis behind OptimizeEnumsPass understands the R_CONST resource-constant opcode, so enums whose instance fields hold resource IDs are optimized rather than skipped. The generated field accessors emit R_CONST too, preserving the resource-ID nature of those values.

Other improvements​

  • New UnconditionallyThrowingClassesPass, an analysis-only pass that reports classes whose <clinit> unconditionally throws. Such a class fails to load if it is ever initialized, so the report points at dead code that keep rules are holding alive.
  • Soundness fixes in SwitchEquivFinder: multiple default cases are rejected instead of being resolved by execution order, which removes the need for clients to filter non-leaf blocks themselves.
  • ConcurrentContainer destruction runs in parallel, cutting total Redex run time by roughly 14% on a large app.
  • Overhaul of the typedef annotation checker and patcher, giving fewer false positives, less redundant analysis work, and clearer, actionable error messages.