Skip to content

fix: retain JsonAdapter generic signature for R8 full mode - #2139

Open
mvanhorn wants to merge 1 commit into
square:masterfrom
mvanhorn:fix/1663-r8-jsonadapter-signature
Open

mvanhorn wants to merge 1 commit into
square:masterfrom
mvanhorn:fix/1663-r8-jsonadapter-signature

Conversation

@mvanhorn

Copy link
Copy Markdown

The embedded R8 rules now match JsonAdapter explicitly to retain its generic signature. The rule permits shrinking and obfuscation, has no member wildcard, and does not match subclasses or other Moshi types; it omits allowoptimization to follow R8 full-mode signature guidance. The diff also adds a test asserting that the resource contains the exact rule and records the fix in the changelog. With R8 full mode, Moshi can reject otherwise valid @toJson and @FromJSON methods that take JsonAdapter delegates, throwing IllegalArgumentException when creating an adapter. R8 full mode can strip generic signatures from types unmatched by keep rules. Without JsonAdapter's signature, reflection exposes a raw delegate parameter, so Moshi's parameter validation fails and delegate binding cannot recover the type argument.

Testing: Tests for the moshi change live in moshi/src/test/java/com/squareup/moshi/MoshiProguardRulesTest.kt.

Fixes #1663

The embedded R8 rules now match JsonAdapter explicitly to retain its
generic signature. The rule permits shrinking and obfuscation, has no
member wildcard, and does not match subclasses or other Moshi types; it
omits allowoptimization to follow R8 full-mode signature guidance. The
diff also adds a test asserting that the resource contains the exact
rule and records the fix in the changelog.

Fixes square#1663
@mvanhorn mvanhorn mentioned this pull request Oct 14, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support R8 FullMode

1 participant