summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorSiyamed Sinir <siyamed@google.com>2017-01-24 22:14:44 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-01-24 22:14:44 +0000
commit3d9238ec638ff337084a2a6b5e52a8715a65b5cc (patch)
tree4f5109d1ef0f9d3ab9289d8466ad01bb2d7e7c66 /core/java/android
parent7afe571bd7f68f7b86bd12ed83653facdd5a0fe3 (diff)
parent1764efad9301fffa3182d0df7ec97e7a80a308d6 (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.java32
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;
}
/**