diff options
| author | Siyamed Sinir <siyamed@google.com> | 2017-01-24 22:14:44 +0000 |
|---|---|---|
| committer | android-build-merger <android-build-merger@google.com> | 2017-01-24 22:14:44 +0000 |
| commit | 3d9238ec638ff337084a2a6b5e52a8715a65b5cc (patch) | |
| tree | 4f5109d1ef0f9d3ab9289d8466ad01bb2d7e7c66 /core/java/android | |
| parent | 7afe571bd7f68f7b86bd12ed83653facdd5a0fe3 (diff) | |
| parent | 1764efad9301fffa3182d0df7ec97e7a80a308d6 (diff) | |
Fix SpannableStringBuilder getSpans sort am: 051caedcaa
am: 1764efad93
Change-Id: I33b2f25901330e79bbc166a318f71d5124d0b332
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/text/SpannableStringBuilder.java | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/core/java/android/text/SpannableStringBuilder.java b/core/java/android/text/SpannableStringBuilder.java index e4d232453553..5f01f7b61bf1 100644 --- a/core/java/android/text/SpannableStringBuilder.java +++ b/core/java/android/text/SpannableStringBuilder.java @@ -1074,16 +1074,19 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable } for (int i = size - 1; i > 0; i--) { - T v = array[0]; - int prio = priority[0]; - int insertOrder = insertionOrder[0]; + final T tmpSpan = array[0]; array[0] = array[i]; + array[i] = tmpSpan; + + final int tmpPriority = priority[0]; priority[0] = priority[i]; + priority[i] = tmpPriority; + + final int tmpOrder = insertionOrder[0]; insertionOrder[0] = insertionOrder[i]; + insertionOrder[i] = tmpOrder; + siftDown(0, array, i, priority, insertionOrder); - array[i] = v; - priority[i] = prio; - insertionOrder[i] = insertOrder; } } @@ -1099,10 +1102,6 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable */ private final <T> void siftDown(int index, T[] array, int size, int[] priority, int[] insertionOrder) { - T v = array[index]; - int prio = priority[index]; - int insertOrder = insertionOrder[index]; - int left = 2 * index + 1; while (left < size) { if (left < size - 1 && compareSpans(left, left + 1, priority, insertionOrder) < 0) { @@ -1111,15 +1110,22 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable if (compareSpans(index, left, priority, insertionOrder) >= 0) { break; } + + final T tmpSpan = array[index]; array[index] = array[left]; + array[left] = tmpSpan; + + final int tmpPriority = priority[index]; priority[index] = priority[left]; + priority[left] = tmpPriority; + + final int tmpOrder = insertionOrder[index]; insertionOrder[index] = insertionOrder[left]; + insertionOrder[left] = tmpOrder; + index = left; left = 2 * index + 1; } - array[index] = v; - priority[index] = prio; - insertionOrder[index] = insertOrder; } /** |
