Skip to content

Commit 0f2a6f4

Browse files
committed
MapOverlay: do not compose on update
1 parent 3d9c022 commit 0f2a6f4

1 file changed

Lines changed: 19 additions & 8 deletions

File tree

api/src/main/java/com/apicatalog/tree/io/morph/MapOverlay.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.apicatalog.tree.io.morph;
22

33
import java.util.Collection;
4+
import java.util.LinkedHashMap;
45
import java.util.Map;
56
import java.util.Map.Entry;
67
import java.util.function.Function;
@@ -18,7 +19,7 @@ public class MapOverlay {
1819

1920
private final Map<Object, Object> overlay;
2021

21-
MapOverlay(Object base, Map<Object, Object> overlay) {
22+
private MapOverlay(Object base, Map<Object, Object> overlay) {
2223
this.base = base;
2324
this.overlay = overlay;
2425
}
@@ -75,26 +76,35 @@ public static Builder newBuilder(Tree tree) {
7576
}
7677

7778
public static Builder newBuilder(Map<Object, Object> map) {
78-
return new Builder(map, JavaAdapter.instance());
79+
return new Builder(map, JavaAdapter.instance(), new LinkedHashMap<>());
7980
}
8081

8182
public static Builder newBuilder(Object map, TreeAdapter adapter) {
82-
if (adapter instanceof MorphAdapter morph) {
83-
return new Builder(map, morph.base);
83+
if (map instanceof MapOverlay overlay) {
84+
return new Builder(overlay.base,
85+
adapter instanceof MorphAdapter morph
86+
? morph.base
87+
: adapter,
88+
new LinkedHashMap<>(overlay.overlay));
8489
}
85-
return new Builder(map, adapter);
90+
return new Builder(map,
91+
adapter instanceof MorphAdapter morph
92+
? morph.base
93+
: adapter,
94+
new LinkedHashMap<>());
8695
}
8796

8897
public static class Builder {
8998

9099
private final Object base;
91100
private final TreeAdapter baseAdapter;
92101

93-
private Map<Object, Object> overlay;
102+
private final Map<Object, Object> overlay;
94103

95-
private Builder(Object base, TreeAdapter baseAdapter) {
104+
private Builder(Object base, TreeAdapter baseAdapter, Map<Object, Object> overlay) {
96105
this.base = base;
97106
this.baseAdapter = baseAdapter;
107+
this.overlay = overlay;
98108
}
99109

100110
public Builder remove(Object key) {
@@ -124,7 +134,8 @@ public Builder put(Object key, Tree tree) {
124134
overlay.put(key, tree.node());
125135
return this;
126136
}
127-
return put(key, tree);
137+
overlay.put(key, tree);
138+
return this;
128139
}
129140

130141
public MapOverlay build() {

0 commit comments

Comments
 (0)