From 9a6274388299f6a3032c18b9797f56ece313b389 Mon Sep 17 00:00:00 2001 From: Santiago Aboy Solanes Date: Thu, 18 May 2023 14:21:38 +0100 Subject: [PATCH] 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 --- core/java/android/text/TextUtils.java | 60 ++++++++++++++------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java index 7ac6ae186cc33..c4ae963c13122 100644 --- a/core/java/android/text/TextUtils.java +++ b/core/java/android/text/TextUtils.java @@ -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;