v2026.09.09 Release
· One min read
Optimizations
- Constant propagation recognizes
Class.isInstanceinvoked on a class literal and replaces it with aninstance-ofcheck, avoiding the reflective-call overhead. - The enum
<clinit>analysis behindOptimizeEnumsPassunderstands theR_CONSTresource-constant opcode, so enums whose instance fields hold resource IDs are optimized rather than skipped. The generated field accessors emitR_CONSTtoo, 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. ConcurrentContainerdestruction 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.