11package com .apicatalog .tree .io .morph ;
22
33import java .util .Collection ;
4+ import java .util .LinkedHashMap ;
45import java .util .Map ;
56import java .util .Map .Entry ;
67import 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