Pull out common code in createFromParcel's switch

It shrinks the method's generated native code to half its size,
saving 5K.

Also saves some DEX instructions (338 -> 250).

Bug: 283148875
Test: Presubmit
Change-Id: Ibf253f83254619a94f89b47eb0ee4c058303ba39
This commit is contained in:
Santiago Aboy Solanes
2023-05-18 14:21:38 +01:00
parent 785394eb54
commit 9a62743882

View File

@@ -871,126 +871,128 @@ public class TextUtils {
if (kind == 0)
break;
final Object span;
switch (kind) {
case ALIGNMENT_SPAN:
readSpan(p, sp, new AlignmentSpan.Standard(p));
span = new AlignmentSpan.Standard(p);
break;
case FOREGROUND_COLOR_SPAN:
readSpan(p, sp, new ForegroundColorSpan(p));
span = new ForegroundColorSpan(p);
break;
case RELATIVE_SIZE_SPAN:
readSpan(p, sp, new RelativeSizeSpan(p));
span = new RelativeSizeSpan(p);
break;
case SCALE_X_SPAN:
readSpan(p, sp, new ScaleXSpan(p));
span = new ScaleXSpan(p);
break;
case STRIKETHROUGH_SPAN:
readSpan(p, sp, new StrikethroughSpan(p));
span = new StrikethroughSpan(p);
break;
case UNDERLINE_SPAN:
readSpan(p, sp, new UnderlineSpan(p));
span = new UnderlineSpan(p);
break;
case STYLE_SPAN:
readSpan(p, sp, new StyleSpan(p));
span = new StyleSpan(p);
break;
case BULLET_SPAN:
readSpan(p, sp, new BulletSpan(p));
span = new BulletSpan(p);
break;
case QUOTE_SPAN:
readSpan(p, sp, new QuoteSpan(p));
span = new QuoteSpan(p);
break;
case LEADING_MARGIN_SPAN:
readSpan(p, sp, new LeadingMarginSpan.Standard(p));
span = new LeadingMarginSpan.Standard(p);
break;
case URL_SPAN:
readSpan(p, sp, new URLSpan(p));
span = new URLSpan(p);
break;
case BACKGROUND_COLOR_SPAN:
readSpan(p, sp, new BackgroundColorSpan(p));
span = new BackgroundColorSpan(p);
break;
case TYPEFACE_SPAN:
readSpan(p, sp, new TypefaceSpan(p));
span = new TypefaceSpan(p);
break;
case SUPERSCRIPT_SPAN:
readSpan(p, sp, new SuperscriptSpan(p));
span = new SuperscriptSpan(p);
break;
case SUBSCRIPT_SPAN:
readSpan(p, sp, new SubscriptSpan(p));
span = new SubscriptSpan(p);
break;
case ABSOLUTE_SIZE_SPAN:
readSpan(p, sp, new AbsoluteSizeSpan(p));
span = new AbsoluteSizeSpan(p);
break;
case TEXT_APPEARANCE_SPAN:
readSpan(p, sp, new TextAppearanceSpan(p));
span = new TextAppearanceSpan(p);
break;
case ANNOTATION:
readSpan(p, sp, new Annotation(p));
span = new Annotation(p);
break;
case SUGGESTION_SPAN:
readSpan(p, sp, new SuggestionSpan(p));
span = new SuggestionSpan(p);
break;
case SPELL_CHECK_SPAN:
readSpan(p, sp, new SpellCheckSpan(p));
span = new SpellCheckSpan(p);
break;
case SUGGESTION_RANGE_SPAN:
readSpan(p, sp, new SuggestionRangeSpan(p));
span = new SuggestionRangeSpan(p);
break;
case EASY_EDIT_SPAN:
readSpan(p, sp, new EasyEditSpan(p));
span = new EasyEditSpan(p);
break;
case LOCALE_SPAN:
readSpan(p, sp, new LocaleSpan(p));
span = new LocaleSpan(p);
break;
case TTS_SPAN:
readSpan(p, sp, new TtsSpan(p));
span = new TtsSpan(p);
break;
case ACCESSIBILITY_CLICKABLE_SPAN:
readSpan(p, sp, new AccessibilityClickableSpan(p));
span = new AccessibilityClickableSpan(p);
break;
case ACCESSIBILITY_URL_SPAN:
readSpan(p, sp, new AccessibilityURLSpan(p));
span = new AccessibilityURLSpan(p);
break;
case LINE_BACKGROUND_SPAN:
readSpan(p, sp, new LineBackgroundSpan.Standard(p));
span = new LineBackgroundSpan.Standard(p);
break;
case LINE_HEIGHT_SPAN:
readSpan(p, sp, new LineHeightSpan.Standard(p));
span = new LineHeightSpan.Standard(p);
break;
case ACCESSIBILITY_REPLACEMENT_SPAN:
readSpan(p, sp, new AccessibilityReplacementSpan(p));
span = new AccessibilityReplacementSpan(p);
break;
default:
throw new RuntimeException("bogus span encoding " + kind);
}
readSpan(p, sp, span);
}
return sp;