Skip to content

Commit 6f9b551

Browse files
authored
[JENKINS-75799] Replace AbstractLazyLoadRunMap.index by CopyOnWriteMap (#10759)
2 parents 9d86dc9 + 05351da commit 6f9b551

File tree

9 files changed

+216
-672
lines changed

9 files changed

+216
-672
lines changed

core/src/main/java/hudson/util/CopyOnWriteMap.java

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@
3737
import java.util.HashMap;
3838
import java.util.LinkedHashMap;
3939
import java.util.Map;
40+
import java.util.NavigableMap;
4041
import java.util.Set;
42+
import java.util.SortedMap;
4143
import java.util.TreeMap;
4244

4345
/**
@@ -64,9 +66,17 @@ protected CopyOnWriteMap() {
6466
update(Collections.emptyMap());
6567
}
6668

69+
protected Map<K, V> getView() {
70+
return view;
71+
}
72+
73+
protected Map<K, V> createView() {
74+
return Collections.unmodifiableMap(core);
75+
}
76+
6777
protected void update(Map<K, V> m) {
6878
core = m;
69-
view = Collections.unmodifiableMap(core);
79+
view = createView();
7080
}
7181

7282
/**
@@ -214,7 +224,7 @@ public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingC
214224
/**
215225
* {@link CopyOnWriteMap} backed by {@link TreeMap}.
216226
*/
217-
public static final class Tree<K, V> extends CopyOnWriteMap<K, V> {
227+
public static final class Tree<K, V> extends CopyOnWriteMap<K, V> implements SortedMap<K, V> {
218228
private final Comparator<K> comparator;
219229

220230
public Tree(Map<K, V> core, Comparator<K> comparator) {
@@ -232,7 +242,7 @@ public Tree() {
232242
}
233243

234244
@Override
235-
protected Map<K, V> copy() {
245+
protected TreeMap<K, V> copy() {
236246
TreeMap<K, V> m = new TreeMap<>(comparator);
237247
m.putAll(core);
238248
return m;
@@ -243,6 +253,50 @@ public synchronized void clear() {
243253
update(new TreeMap<>(comparator));
244254
}
245255

256+
@Override
257+
protected NavigableMap<K, V> createView() {
258+
return Collections.unmodifiableNavigableMap((NavigableMap<K, V>) core);
259+
}
260+
261+
@Override
262+
public NavigableMap<K, V> getView() {
263+
return (NavigableMap<K, V>) super.getView();
264+
}
265+
266+
public NavigableMap<K, V> descendingMap() {
267+
return getView().descendingMap();
268+
}
269+
270+
@Override
271+
public Comparator<? super K> comparator() {
272+
return getView().comparator();
273+
}
274+
275+
@Override
276+
public SortedMap<K, V> subMap(K fromKey, K toKey) {
277+
return getView().subMap(fromKey, toKey);
278+
}
279+
280+
@Override
281+
public SortedMap<K, V> headMap(K toKey) {
282+
return getView().headMap(toKey);
283+
}
284+
285+
@Override
286+
public SortedMap<K, V> tailMap(K fromKey) {
287+
return getView().tailMap(fromKey);
288+
}
289+
290+
@Override
291+
public K firstKey() {
292+
return getView().firstKey();
293+
}
294+
295+
@Override
296+
public K lastKey() {
297+
return getView().lastKey();
298+
}
299+
246300
public static class ConverterImpl extends TreeMapConverter {
247301
public ConverterImpl(Mapper mapper) {
248302
super(mapper);

0 commit comments

Comments
 (0)