Committed by
Gerrit Code Review
ONOS-1770 DefaultDistributedSet.toArray(T[]) does not support array size different than set size.
Change-Id: Ibf3e32ac466e1142a17457b52e091897326d8ba8
Showing
1 changed file
with
8 additions
and
1 deletions
| ... | @@ -24,6 +24,7 @@ import org.onosproject.store.service.MapEventListener; | ... | @@ -24,6 +24,7 @@ import org.onosproject.store.service.MapEventListener; |
| 24 | import org.onosproject.store.service.SetEvent; | 24 | import org.onosproject.store.service.SetEvent; |
| 25 | import org.onosproject.store.service.SetEventListener; | 25 | import org.onosproject.store.service.SetEventListener; |
| 26 | 26 | ||
| 27 | +import java.lang.reflect.Array; | ||
| 27 | import java.util.Collection; | 28 | import java.util.Collection; |
| 28 | import java.util.Iterator; | 29 | import java.util.Iterator; |
| 29 | import java.util.Map; | 30 | import java.util.Map; |
| ... | @@ -117,7 +118,13 @@ public class DefaultDistributedSet<E> implements DistributedSet<E> { | ... | @@ -117,7 +118,13 @@ public class DefaultDistributedSet<E> implements DistributedSet<E> { |
| 117 | public <T> T[] toArray(T[] a) { | 118 | public <T> T[] toArray(T[] a) { |
| 118 | final MeteringAgent.Context timer = monitor.startTimer(TO_ARRAY); | 119 | final MeteringAgent.Context timer = monitor.startTimer(TO_ARRAY); |
| 119 | try { | 120 | try { |
| 120 | - return backingMap.keySet().stream().toArray(size -> a); | 121 | + // TODO: Optimize this to only allocate a new array if the set size |
| 122 | + // is larger than the array.length. If the set size is smaller than | ||
| 123 | + // the array.length then copy the data into the array and set the | ||
| 124 | + // last element in the array to be null. | ||
| 125 | + final T[] resizedArray = | ||
| 126 | + (T[]) Array.newInstance(a.getClass().getComponentType(), backingMap.keySet().size()); | ||
| 127 | + return (T[]) backingMap.keySet().toArray(resizedArray); | ||
| 121 | } finally { | 128 | } finally { |
| 122 | timer.stop(null); | 129 | timer.stop(null); |
| 123 | } | 130 | } | ... | ... |
-
Please register or login to post a comment