Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a627438 authored by Santiago Aboy Solanes's avatar Santiago Aboy Solanes
Browse files

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
parent 785394eb
Loading
Loading
Loading
Loading
+31 −29
Original line number Diff line number Diff line
@@ -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;