1- // Copyright (c) Microsoft Corporation. All rights reserved.
1+ // Copyright (c) Microsoft Corporation. All rights reserved.
22// Licensed under the MIT license.
33
44using System . Collections . Generic ;
@@ -29,10 +29,11 @@ private static void ParseMap<T>(
2929 return ;
3030 }
3131
32- foreach ( var propertyNode in mapNode )
32+ var allFields = fixedFieldMap . Keys . Union ( mapNode . Select ( static x => x . Name ) ) ;
33+ foreach ( var propertyNode in allFields )
3334 {
34- propertyNode . ParseField ( domainObject , fixedFieldMap , patternFieldMap ) ;
35- requiredFields ? . Remove ( propertyNode . Name ) ;
35+ mapNode [ propertyNode ] ? . ParseField ( domainObject , fixedFieldMap , patternFieldMap ) ;
36+ requiredFields ? . Remove ( propertyNode ) ;
3637 }
3738 }
3839
@@ -77,16 +78,18 @@ private static void ProcessAnyListFields<T>(
7778 var newProperty = new List < IOpenApiAny > ( ) ;
7879
7980 mapNode . Context . StartObject ( anyListFieldName ) ;
80-
81- var list = anyListFieldMap [ anyListFieldName ] . PropertyGetter ( domainObject ) ;
82- if ( list != null )
81+ if ( anyListFieldMap . TryGetValue ( anyListFieldName , out var fieldName ) )
8382 {
84- foreach ( var propertyElement in list )
83+ var list = fieldName . PropertyGetter ( domainObject ) ;
84+ if ( list != null )
8585 {
86- newProperty . Add (
87- OpenApiAnyConverter . GetSpecificOpenApiAny (
88- propertyElement ,
89- anyListFieldMap [ anyListFieldName ] . SchemaGetter ( domainObject ) ) ) ;
86+ foreach ( var propertyElement in list )
87+ {
88+ newProperty . Add (
89+ OpenApiAnyConverter . GetSpecificOpenApiAny (
90+ propertyElement ,
91+ anyListFieldMap [ anyListFieldName ] . SchemaGetter ( domainObject ) ) ) ;
92+ }
9093 }
9194 }
9295
@@ -104,47 +107,6 @@ private static void ProcessAnyListFields<T>(
104107 }
105108 }
106109
107- private static void ProcessAnyMapFields < T , U > (
108- MapNode mapNode ,
109- T domainObject ,
110- AnyMapFieldMap < T , U > anyMapFieldMap )
111- {
112- foreach ( var anyMapFieldName in anyMapFieldMap . Keys . ToList ( ) )
113- {
114- try
115- {
116- var newProperty = new List < IOpenApiAny > ( ) ;
117-
118- mapNode . Context . StartObject ( anyMapFieldName ) ;
119-
120- foreach ( var propertyMapElement in anyMapFieldMap [ anyMapFieldName ] . PropertyMapGetter ( domainObject ) )
121- {
122- if ( propertyMapElement . Value != null )
123- {
124- mapNode . Context . StartObject ( propertyMapElement . Key ) ;
125-
126- var any = anyMapFieldMap [ anyMapFieldName ] . PropertyGetter ( propertyMapElement . Value ) ;
127-
128- var newAny = OpenApiAnyConverter . GetSpecificOpenApiAny (
129- any ,
130- anyMapFieldMap [ anyMapFieldName ] . SchemaGetter ( domainObject ) ) ;
131-
132- anyMapFieldMap [ anyMapFieldName ] . PropertySetter ( propertyMapElement . Value , newAny ) ;
133- }
134- }
135- }
136- catch ( OpenApiException exception )
137- {
138- exception . Pointer = mapNode . Context . GetLocation ( ) ;
139- mapNode . Context . Diagnostic . Errors . Add ( new OpenApiError ( exception ) ) ;
140- }
141- finally
142- {
143- mapNode . Context . EndObject ( ) ;
144- }
145- }
146- }
147-
148110 public static IOpenApiAny LoadAny ( ParseNode node )
149111 {
150112 return OpenApiAnyConverter . GetSpecificOpenApiAny ( node . CreateAny ( ) ) ;
0 commit comments