@@ -58,39 +58,39 @@ public TypeInfo BuildType(TypeDef typeDef)
58
58
typeInfo . TypeId = typeDef . StaticTypeId . Value ;
59
59
}
60
60
61
- context . Model . Types . Add ( typeInfo ) ;
61
+ var contextModelTypes = context . Model . Types ;
62
+ contextModelTypes . Add ( typeInfo ) ;
62
63
63
64
// Registering connections between type & its ancestors
64
- var node = context . DependencyGraph . TryGetNode ( typeDef ) ;
65
- if ( node != null ) {
66
- foreach ( var edge in node . OutgoingEdges . Where ( static e =>
67
- e . Kind is EdgeKind . Implementation or EdgeKind . Inheritance ) ) {
68
- var baseType = context . Model . Types [ edge . Head . Value . UnderlyingType ] ;
65
+ if ( context . DependencyGraph . TryGetNode ( typeDef ) is { } node ) {
66
+ foreach ( var edge in node . OutgoingEdges . Where ( static e => e . Kind is EdgeKind . Implementation or EdgeKind . Inheritance ) ) {
67
+ var baseType = contextModelTypes [ edge . Head . Value . UnderlyingType ] ;
69
68
switch ( edge . Kind ) {
70
69
case EdgeKind . Inheritance :
71
- context . Model . Types . RegisterInheritance ( baseType , typeInfo ) ;
70
+ contextModelTypes . RegisterInheritance ( baseType , typeInfo ) ;
72
71
break ;
73
72
case EdgeKind . Implementation :
74
- context . Model . Types . RegisterImplementation ( baseType , typeInfo ) ;
73
+ contextModelTypes . RegisterImplementation ( baseType , typeInfo ) ;
75
74
break ;
76
75
}
77
76
}
78
77
}
79
78
79
+ var typeDefFields = typeDef . Fields ;
80
80
if ( typeDef . IsEntity ) {
81
81
var hierarchyDef = context . ModelDef . FindHierarchy ( typeDef ) ;
82
82
83
83
// Is type a hierarchy root?
84
84
if ( typeInfo . UnderlyingType == hierarchyDef . Root . UnderlyingType ) {
85
85
foreach ( var keyField in hierarchyDef . KeyFields ) {
86
- var fieldInfo = BuildDeclaredField ( typeInfo , typeDef . Fields [ keyField . Name ] ) ;
86
+ var fieldInfo = BuildDeclaredField ( typeInfo , typeDefFields [ keyField . Name ] ) ;
87
87
fieldInfo . IsPrimaryKey = true ;
88
88
}
89
89
90
90
typeInfo . Hierarchy = BuildHierarchyInfo ( typeInfo , hierarchyDef ) ;
91
91
}
92
92
else {
93
- var root = context . Model . Types [ hierarchyDef . Root . UnderlyingType ] ;
93
+ var root = contextModelTypes [ hierarchyDef . Root . UnderlyingType ] ;
94
94
typeInfo . Hierarchy = root . Hierarchy ;
95
95
foreach ( var fieldInfo in root . Fields . Where ( static f => f . IsPrimaryKey && f . Parent == null ) ) {
96
96
BuildInheritedField ( typeInfo , fieldInfo ) ;
@@ -100,7 +100,7 @@ public TypeInfo BuildType(TypeDef typeDef)
100
100
else if ( typeDef . IsInterface ) {
101
101
var hierarchyDef = context . ModelDef . FindHierarchy ( typeDef . Implementors [ 0 ] ) ;
102
102
foreach ( var keyField in hierarchyDef . KeyFields ) {
103
- var fieldInfo = BuildDeclaredField ( typeInfo , typeDef . Fields [ keyField . Name ] ) ;
103
+ var fieldInfo = BuildDeclaredField ( typeInfo , typeDefFields [ keyField . Name ] ) ;
104
104
fieldInfo . IsPrimaryKey = true ;
105
105
}
106
106
}
@@ -134,12 +134,15 @@ public void BuildTypeDiscriminatorMap(TypeDef typeDef, TypeInfo typeInfo)
134
134
135
135
public void BuildFields ( TypeDef typeDef , TypeInfo typeInfo )
136
136
{
137
+ var typeDefFields = typeDef . Fields ;
138
+ var typeInfoFields = typeInfo . Fields ;
139
+ var typeInfoFieldMap = typeInfo . FieldMap ;
137
140
if ( typeInfo . IsInterface ) {
138
141
var sourceFields = typeInfo . DirectInterfaces
139
142
. SelectMany ( static i => i . Fields )
140
143
. Where ( static f => ! f . IsPrimaryKey && f . Parent == null ) ;
141
144
foreach ( var srcField in sourceFields ) {
142
- if ( ! typeInfo . Fields . Contains ( srcField . Name ) ) {
145
+ if ( ! typeInfoFields . Contains ( srcField . Name ) ) {
143
146
BuildInheritedField ( typeInfo , srcField ) ;
144
147
}
145
148
}
@@ -148,7 +151,7 @@ public void BuildFields(TypeDef typeDef, TypeInfo typeInfo)
148
151
var ancestor = typeInfo . Ancestor ;
149
152
if ( ancestor != null ) {
150
153
foreach ( var srcField in ancestor . Fields . Where ( static f => ! f . IsPrimaryKey && f . Parent == null ) ) {
151
- if ( typeDef . Fields . TryGetValue ( srcField . Name , out var fieldDef ) ) {
154
+ if ( typeDefFields . TryGetValue ( srcField . Name , out var fieldDef ) ) {
152
155
if ( fieldDef . UnderlyingProperty == null ) {
153
156
throw new DomainBuilderException (
154
157
string . Format ( Strings . ExFieldXIsAlreadyDefinedInTypeXOrItsAncestor , fieldDef . Name , typeInfo . Name ) ) ;
@@ -168,13 +171,13 @@ public void BuildFields(TypeDef typeDef, TypeInfo typeInfo)
168
171
}
169
172
170
173
foreach ( var pair in ancestor . FieldMap ) {
171
- typeInfo . FieldMap . Add ( pair . Key , typeInfo . Fields [ pair . Value . Name ] ) ;
174
+ typeInfoFieldMap . Add ( pair . Key , typeInfoFields [ pair . Value . Name ] ) ;
172
175
}
173
176
}
174
177
}
175
178
176
- foreach ( var fieldDef in typeDef . Fields ) {
177
- if ( typeInfo . Fields . TryGetValue ( fieldDef . Name , out var field ) ) {
179
+ foreach ( var fieldDef in typeDefFields ) {
180
+ if ( typeInfoFields . TryGetValue ( fieldDef . Name , out var field ) ) {
178
181
if ( field . ValueType != fieldDef . ValueType ) {
179
182
throw new DomainBuilderException (
180
183
string . Format ( Strings . ExFieldXIsAlreadyDefinedInTypeXOrItsAncestor , fieldDef . Name , typeInfo . Name ) ) ;
@@ -197,34 +200,28 @@ public void BuildFields(TypeDef typeDef, TypeInfo typeInfo)
197
200
198
201
private void BuildFieldMap ( TypeInfo @interface , TypeInfo implementor )
199
202
{
203
+ var implementorFields = implementor . Fields ;
204
+ var implementorFieldMap = implementor . FieldMap ;
200
205
foreach ( var field in @interface . Fields . Where ( static f => f . IsDeclared ) ) {
201
206
var explicitName = context . NameBuilder . BuildExplicitFieldName ( field . DeclaringType , field . Name ) ;
202
- if ( implementor . Fields . TryGetValue ( explicitName , out var implField ) ) {
207
+ if ( implementorFields . TryGetValue ( explicitName , out var implField ) ) {
203
208
implField . IsExplicit = true ;
204
209
}
205
210
else {
206
- if ( ! implementor . Fields . TryGetValue ( field . Name , out implField ) ) {
211
+ if ( ! implementorFields . TryGetValue ( field . Name , out implField ) ) {
207
212
throw new DomainBuilderException (
208
213
string . Format ( Strings . TypeXDoesNotImplementYZField , implementor . Name , @interface . Name , field . Name ) ) ;
209
214
}
210
215
}
211
216
212
217
implField . IsInterfaceImplementation = true ;
213
-
214
- if ( ! implementor . FieldMap . ContainsKey ( field ) ) {
215
- implementor . FieldMap . Add ( field , implField ) ;
216
- }
217
- else {
218
- implementor . FieldMap . Override ( field , implField ) ;
219
- }
218
+ implementorFieldMap . AddOrOverride ( field , implField ) ;
220
219
221
220
var declaringType = implField . DeclaringType ;
222
221
var declaringField = implField . DeclaringField ;
223
222
if ( implField . IsInherited && declaringType . IsEntity ) {
224
223
declaringField . IsInterfaceImplementation = true ;
225
- if ( ! declaringType . FieldMap . ContainsKey ( field ) ) {
226
- declaringType . FieldMap . Add ( field , declaringField ) ;
227
- }
224
+ declaringType . FieldMap . TryAdd ( field , declaringField ) ;
228
225
}
229
226
}
230
227
}
@@ -235,11 +232,12 @@ private FieldInfo BuildDeclaredField(TypeInfo type, FieldDef fieldDef)
235
232
236
233
var validators = fieldDef . Validators ;
237
234
238
- if ( fieldDef . IsStructure && DeclaresOnValidate ( fieldDef . ValueType ) ) {
235
+ var valueType = fieldDef . ValueType ;
236
+ if ( fieldDef . IsStructure && DeclaresOnValidate ( valueType ) ) {
239
237
validators . Add ( new StructureFieldValidator ( ) ) ;
240
238
}
241
239
242
- if ( fieldDef . IsEntitySet && DeclaresOnValidate ( fieldDef . ValueType ) ) {
240
+ if ( fieldDef . IsEntitySet && DeclaresOnValidate ( valueType ) ) {
243
241
validators . Add ( new EntitySetFieldValidator ( ) ) ;
244
242
}
245
243
@@ -248,7 +246,7 @@ private FieldInfo BuildDeclaredField(TypeInfo type, FieldDef fieldDef)
248
246
Name = fieldDef . Name ,
249
247
OriginalName = fieldDef . Name ,
250
248
MappingName = fieldDef . MappingName ,
251
- ValueType = fieldDef . ValueType ,
249
+ ValueType = valueType ,
252
250
ItemType = fieldDef . ItemType ,
253
251
Length = fieldDef . Length ,
254
252
Scale = fieldDef . Scale ,
@@ -642,4 +640,4 @@ public TypeBuilder(BuildingContext context)
642
640
. ToDictionary ( configuration => context . NameBuilder . BuildKeyGeneratorName ( configuration ) ) ;
643
641
}
644
642
}
645
- }
643
+ }
0 commit comments