@@ -18,18 +18,12 @@ namespace Microsoft.OpenApi.Reader
1818 internal class MapNode : ParseNode , IEnumerable < PropertyNode >
1919 {
2020 private readonly JsonObject _node ;
21- private Dictionary < string , PropertyNode > ? _nodes ;
2221
23- private void EnsureNodesIsInitialized ( )
22+ private PropertyNode GetPropertyNodeFromJsonNode ( string key , JsonNode ? node )
2423 {
25- if ( _nodes is null )
26- {
27- _nodes = _node . Where ( p => p . Value is not null ) . OfType < KeyValuePair < string , JsonNode > > ( ) . ToDictionary ( p => p . Key , p => new PropertyNode ( Context , p . Key , p . Value ) , StringComparer . Ordinal ) ;
28- if ( _node . Where ( p => p . Value is null ) . ToArray ( ) is { Length : > 0 } nullNodes )
29- {
30- _nodes . AddRange ( nullNodes . Select ( p => new KeyValuePair < string , PropertyNode > ( p . Key , new PropertyNode ( Context , p . Key , JsonNullSentinel . JsonNull ) ) ) ) ;
31- }
32- }
24+ return node is null ?
25+ new PropertyNode ( Context , key , JsonNullSentinel . JsonNull ) :
26+ new PropertyNode ( Context , key , node ) ;
3327 }
3428
3529 public MapNode ( ParsingContext context , JsonNode node ) : base (
@@ -47,14 +41,10 @@ public PropertyNode? this[string key]
4741 {
4842 get
4943 {
50- if ( _node . ContainsKey ( key ) )
51- {
52- EnsureNodesIsInitialized ( ) ;
53- if ( _nodes ! . TryGetValue ( key , out var propertyNode ) )
54- {
55- return propertyNode ;
56- }
57- }
44+ if ( _node . TryGetPropertyValue ( key , out var value ) )
45+ {
46+ return GetPropertyNodeFromJsonNode ( key , value ) ;
47+ }
5848
5949 return null ;
6050 }
@@ -142,10 +132,11 @@ public override Dictionary<string, HashSet<T>> CreateArrayMap<T>(Func<ValueNode,
142132 return nodes . ToDictionary ( kvp => kvp . key , kvp => kvp . values ) ;
143133 }
144134
135+ private List < PropertyNode > ? _nodes ;
145136 public IEnumerator < PropertyNode > GetEnumerator ( )
146137 {
147- EnsureNodesIsInitialized ( ) ;
148- return _nodes ! . Values . GetEnumerator ( ) ;
138+ _nodes ??= _node . Select ( p => GetPropertyNodeFromJsonNode ( p . Key , p . Value ) ) . ToList ( ) ;
139+ return _nodes . GetEnumerator ( ) ;
149140 }
150141
151142 IEnumerator IEnumerable . GetEnumerator ( )
0 commit comments