@@ -130,31 +130,37 @@ TypeReference typeReference
130
130
{
131
131
var genericParameter = ( Mono . Cecil . GenericParameter ) typeReference ;
132
132
var declarerIsMethod = genericParameter . Type == GenericParameterType . Method ;
133
- var declaringType = GetOrCreateStubTypeInstanceFromTypeReference (
134
- declarerIsMethod
135
- ? genericParameter . DeclaringMethod . DeclaringType
136
- : genericParameter . DeclaringType
137
- ) ;
138
- var declaringMethod = declarerIsMethod
139
- ? GetOrCreateMethodMemberFromMethodReference (
140
- declaringType ,
141
- genericParameter . DeclaringMethod
142
- )
143
- : null ;
144
- var declarerFullName =
145
- declaringMethod != null
146
- ? declaringMethod . Member . FullName
147
- : declaringType . Type . FullName ;
133
+ var declarerFullName = declarerIsMethod
134
+ ? genericParameter . DeclaringMethod . BuildFullName ( )
135
+ : genericParameter . DeclaringType . BuildFullName ( ) ;
136
+ var declaringTypeAssemblyName = declarerIsMethod
137
+ ? genericParameter . DeclaringMethod . DeclaringType . Module . Assembly . FullName
138
+ : genericParameter . DeclaringType . Module . Assembly . FullName ;
148
139
var assemblyQualifiedName = System . Reflection . Assembly . CreateQualifiedName (
149
- declaringType . Type . Assembly . FullName ,
140
+ declaringTypeAssemblyName ,
150
141
$ "{ declarerFullName } +<{ genericParameter . Name } >"
151
142
) ;
152
143
if ( _allTypes . TryGetValue ( assemblyQualifiedName , out var existingTypeInstance ) )
153
144
{
154
145
return existingTypeInstance ;
155
146
}
147
+ var isCompilerGenerated = genericParameter . IsCompilerGenerated ( ) ;
148
+ var variance = genericParameter . GetVariance ( ) ;
149
+ var typeConstraints = genericParameter . Constraints . Select ( con =>
150
+ GetOrCreateStubTypeInstanceFromTypeReference ( con . ConstraintType )
151
+ ) ;
156
152
var result = new TypeInstance < GenericParameter > (
157
- CreateGenericParameter ( genericParameter , declaringType , declaringMethod )
153
+ new GenericParameter (
154
+ declarerFullName ,
155
+ genericParameter . Name ,
156
+ variance ,
157
+ typeConstraints ,
158
+ genericParameter . HasReferenceTypeConstraint ,
159
+ genericParameter . HasNotNullableValueTypeConstraint ,
160
+ genericParameter . HasDefaultConstructorConstraint ,
161
+ isCompilerGenerated ,
162
+ declarerIsMethod
163
+ )
158
164
) ;
159
165
_allTypes . Add ( assemblyQualifiedName , result ) ;
160
166
return result ;
@@ -199,7 +205,7 @@ TypeReference typeReference
199
205
} while ( elementType . IsArray ) ;
200
206
var elementTypeInstance = GetOrCreateStubTypeInstanceFromTypeReference ( elementType ) ;
201
207
var assemblyQualifiedName = System . Reflection . Assembly . CreateQualifiedName (
202
- elementTypeInstance . Type . Assembly . FullName ,
208
+ elementTypeInstance . Type . Assembly ? . FullName ?? "" ,
203
209
typeReference . BuildFullName ( )
204
210
) ;
205
211
if ( _allTypes . TryGetValue ( assemblyQualifiedName , out var existingTypeInstance ) )
@@ -398,6 +404,12 @@ IEnumerable<int> arrayDimensions
398
404
genericArguments ,
399
405
arrayDimensions
400
406
) ;
407
+ case UnavailableType unavailableType :
408
+ return new TypeInstance < UnavailableType > (
409
+ unavailableType ,
410
+ genericArguments ,
411
+ arrayDimensions
412
+ ) ;
401
413
default :
402
414
throw new ArgumentException ( "Subtype of IType not recognized" ) ;
403
415
}
@@ -603,35 +615,6 @@ IGenericParameterProvider genericParameterProvider
603
615
. Cast < GenericParameter > ( ) ;
604
616
}
605
617
606
- private GenericParameter CreateGenericParameter (
607
- Mono . Cecil . GenericParameter genericParameter ,
608
- ITypeInstance < IType > declaringTypeInstance ,
609
- [ CanBeNull ] MethodMemberInstance declaringMethodInstance
610
- )
611
- {
612
- var isCompilerGenerated = genericParameter . IsCompilerGenerated ( ) ;
613
- var variance = genericParameter . GetVariance ( ) ;
614
- var typeConstraints = genericParameter . Constraints . Select ( con =>
615
- GetOrCreateStubTypeInstanceFromTypeReference ( con . ConstraintType )
616
- ) ;
617
- var declarerFullName =
618
- declaringMethodInstance != null
619
- ? declaringMethodInstance . Member . FullName
620
- : declaringTypeInstance . Type . FullName ;
621
- return new GenericParameter (
622
- declaringTypeInstance ,
623
- declaringMethodInstance ,
624
- $ "{ declarerFullName } +<{ genericParameter . Name } >",
625
- genericParameter . Name ,
626
- variance ,
627
- typeConstraints ,
628
- genericParameter . HasReferenceTypeConstraint ,
629
- genericParameter . HasNotNullableValueTypeConstraint ,
630
- genericParameter . HasDefaultConstructorConstraint ,
631
- isCompilerGenerated
632
- ) ;
633
- }
634
-
635
618
internal GenericArgument CreateGenericArgumentFromTypeReference ( TypeReference typeReference )
636
619
{
637
620
return new GenericArgument ( GetOrCreateStubTypeInstanceFromTypeReference ( typeReference ) ) ;
0 commit comments