@@ -130,31 +130,37 @@ TypeReference typeReference
130130 {
131131 var genericParameter = ( Mono . Cecil . GenericParameter ) typeReference ;
132132 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 ;
148139 var assemblyQualifiedName = System . Reflection . Assembly . CreateQualifiedName (
149- declaringType . Type . Assembly . FullName ,
140+ declaringTypeAssemblyName ,
150141 $ "{ declarerFullName } +<{ genericParameter . Name } >"
151142 ) ;
152143 if ( _allTypes . TryGetValue ( assemblyQualifiedName , out var existingTypeInstance ) )
153144 {
154145 return existingTypeInstance ;
155146 }
147+ var isCompilerGenerated = genericParameter . IsCompilerGenerated ( ) ;
148+ var variance = genericParameter . GetVariance ( ) ;
149+ var typeConstraints = genericParameter . Constraints . Select ( con =>
150+ GetOrCreateStubTypeInstanceFromTypeReference ( con . ConstraintType )
151+ ) ;
156152 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+ )
158164 ) ;
159165 _allTypes . Add ( assemblyQualifiedName , result ) ;
160166 return result ;
@@ -199,7 +205,7 @@ TypeReference typeReference
199205 } while ( elementType . IsArray ) ;
200206 var elementTypeInstance = GetOrCreateStubTypeInstanceFromTypeReference ( elementType ) ;
201207 var assemblyQualifiedName = System . Reflection . Assembly . CreateQualifiedName (
202- elementTypeInstance . Type . Assembly . FullName ,
208+ elementTypeInstance . Type . Assembly ? . FullName ?? "" ,
203209 typeReference . BuildFullName ( )
204210 ) ;
205211 if ( _allTypes . TryGetValue ( assemblyQualifiedName , out var existingTypeInstance ) )
@@ -398,6 +404,12 @@ IEnumerable<int> arrayDimensions
398404 genericArguments ,
399405 arrayDimensions
400406 ) ;
407+ case UnavailableType unavailableType :
408+ return new TypeInstance < UnavailableType > (
409+ unavailableType ,
410+ genericArguments ,
411+ arrayDimensions
412+ ) ;
401413 default :
402414 throw new ArgumentException ( "Subtype of IType not recognized" ) ;
403415 }
@@ -603,35 +615,6 @@ IGenericParameterProvider genericParameterProvider
603615 . Cast < GenericParameter > ( ) ;
604616 }
605617
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-
635618 internal GenericArgument CreateGenericArgumentFromTypeReference ( TypeReference typeReference )
636619 {
637620 return new GenericArgument ( GetOrCreateStubTypeInstanceFromTypeReference ( typeReference ) ) ;
0 commit comments