@@ -93,7 +93,7 @@ internal bool IsStableType(Type type)
9393 /// </summary>
9494 internal Type GetTypeFromPersistedString ( string persistedTypeString ) => _stringToType . GetOrAdd ( persistedTypeString , key =>
9595 {
96- var parsed = TypeNameParser . Parse ( key ) ;
96+ var parsed = TypeNameParser . ParsedTypeName . Parse ( key ) ;
9797 return ResolveFromParsed ( parsed ) ;
9898 } ) ;
9999
@@ -103,7 +103,7 @@ internal Type GetTypeFromPersistedString(string persistedTypeString) => _stringT
103103 /// </summary>
104104 internal string GetPersistedStringFromAssemblyQualifiedName ( string assemblyQualifiedName )
105105 {
106- var parsed = TypeNameParser . Parse ( assemblyQualifiedName ) ;
106+ var parsed = TypeNameParser . ParsedTypeName . Parse ( assemblyQualifiedName ) ;
107107 var transformed = TransformToPersisted ( parsed ) ;
108108 return transformed . ToAssemblyQualifiedNameString ( ) ;
109109 }
@@ -118,7 +118,7 @@ TypeIdentifier ComputeId(Type type)
118118 if ( type . IsArray || ( type . IsGenericType && ! type . IsGenericTypeDefinition ) )
119119 {
120120 var aqn = type . AssemblyQualifiedName ! ;
121- var parsed = TypeNameParser . Parse ( aqn ) ;
121+ var parsed = TypeNameParser . ParsedTypeName . Parse ( aqn ) ;
122122 var transformed = TransformToPersisted ( parsed ) ;
123123 var resultString = transformed . ToAssemblyQualifiedNameString ( ) ;
124124
@@ -161,13 +161,13 @@ Type ResolveFromParsed(TypeNameParser.ParsedTypeName parsed)
161161 {
162162 // Mapped component — type name is a GUID
163163 var guid = Guid . Parse ( parsed . TypeName ) ;
164- if ( parsed . TypeArguments is { Length : > 0 } )
164+ if ( parsed is TypeNameParser . ParsedGenericTypeName mappedGeneric )
165165 {
166166 // Mapped open generic definition
167167 if ( ! _guidToOpenGeneric . TryGetValue ( guid , out var openGenericType ) )
168168 throw new InvalidOperationException ( $ "No open generic mapping found for GUID: { guid } ") ;
169169
170- var typeArgs = parsed . TypeArguments . Select ( ResolveFromParsed ) . ToArray ( ) ;
170+ var typeArgs = mappedGeneric . TypeArguments . Select ( ResolveFromParsed ) . ToArray ( ) ;
171171 baseType = openGenericType . MakeGenericType ( typeArgs ) ;
172172 }
173173 else
@@ -180,14 +180,14 @@ Type ResolveFromParsed(TypeNameParser.ParsedTypeName parsed)
180180 else
181181 {
182182 // Stable component — real type name, real assembly name
183- if ( parsed . TypeArguments is { Length : > 0 } )
183+ if ( parsed is TypeNameParser . ParsedGenericTypeName stableGeneric )
184184 {
185185 // Stable open generic — strip the type arguments to get the open generic definition
186186 var openGenericAqn = $ "{ parsed . TypeName } , { assemblyName } ";
187187 var openGenericType = Type . GetType ( openGenericAqn )
188188 ?? throw new InvalidOperationException ( $ "Could not resolve stable open generic type: { openGenericAqn } ") ;
189189
190- var typeArgs = parsed . TypeArguments . Select ( ResolveFromParsed ) . ToArray ( ) ;
190+ var typeArgs = stableGeneric . TypeArguments . Select ( ResolveFromParsed ) . ToArray ( ) ;
191191 baseType = openGenericType . MakeGenericType ( typeArgs ) ;
192192 }
193193 else
@@ -236,32 +236,25 @@ TypeNameParser.ParsedTypeName TransformToPersisted(TypeNameParser.ParsedTypeName
236236 if ( assemblyName == "0" )
237237 return parsed ;
238238
239- // Try to resolve the base type to check if it's mapped
240239 var baseTypeName = parsed . TypeName ;
241240
242- // Transform type arguments recursively
243- var transformedArgs = parsed . TypeArguments ? . Select ( TransformToPersisted ) . ToArray ( ) ;
244-
245- // For generic types, check if the open generic definition is mapped
246- if ( transformedArgs is { Length : > 0 } )
241+ // Generic type — transform arguments recursively, then check if the open generic definition is mapped
242+ if ( parsed is TypeNameParser . ParsedGenericTypeName generic )
247243 {
244+ var transformedArgs = generic . TypeArguments . Select ( TransformToPersisted ) . ToArray ( ) ;
245+
248246 var openGenericAqn = $ "{ baseTypeName } , { assemblyName } ";
249247 var openGenericType = Type . GetType ( openGenericAqn ) ;
250248
251249 if ( openGenericType != null && _openGenericToGuid . TryGetValue ( openGenericType , out var openGenericGuid ) )
252- {
253- return new TypeNameParser . ParsedTypeName (
250+ return new TypeNameParser . ParsedGenericTypeName (
254251 openGenericGuid . ToString ( ) ,
255252 "0" ,
256253 transformedArgs ,
257254 parsed . ArraySuffix ) ;
258- }
259255
260- // Stable open generic — check if assembly is stable
261256 if ( IsStableAssembly ( assemblyName ) )
262- {
263- return new TypeNameParser . ParsedTypeName ( baseTypeName , assemblyName , transformedArgs , parsed . ArraySuffix ) ;
264- }
257+ return new TypeNameParser . ParsedGenericTypeName ( baseTypeName , assemblyName , transformedArgs , parsed . ArraySuffix ) ;
265258
266259 throw new InvalidOperationException (
267260 $ "Open generic type '{ baseTypeName } ' from assembly '{ assemblyName } ' is not mapped and its assembly is not registered as stable.") ;
@@ -276,29 +269,23 @@ TypeNameParser.ParsedTypeName TransformToPersisted(TypeNameParser.ParsedTypeName
276269 {
277270 var elementType = leafType . GetElementType ( ) ! ;
278271 if ( _leafTypeToGuid . TryGetValue ( elementType , out var elementGuid ) )
279- {
280- return new TypeNameParser . ParsedTypeName (
272+ return new TypeNameParser . ParsedLeafTypeName (
281273 elementGuid . ToString ( ) ,
282274 "0" ,
283- null ,
284275 parsed . ArraySuffix ) ;
285- }
286276
287277 if ( IsStableAssembly ( assemblyName ) )
288- return new TypeNameParser . ParsedTypeName ( baseTypeName , assemblyName , null , parsed . ArraySuffix ) ;
278+ return new TypeNameParser . ParsedLeafTypeName ( baseTypeName , assemblyName , parsed . ArraySuffix ) ;
289279
290280 throw new InvalidOperationException (
291281 $ "Array element type '{ elementType . FullName } ' from assembly '{ assemblyName } ' is not mapped and its assembly is not registered as stable.") ;
292282 }
293283
294284 if ( leafType != null && _leafTypeToGuid . TryGetValue ( leafType , out var leafGuid ) )
295- {
296- return new TypeNameParser . ParsedTypeName (
285+ return new TypeNameParser . ParsedLeafTypeName (
297286 leafGuid . ToString ( ) ,
298287 "0" ,
299- null ,
300288 parsed . ArraySuffix ) ;
301- }
302289
303290 // Stable leaf type — check if assembly is stable
304291 if ( IsStableAssembly ( assemblyName ) )
0 commit comments