Skip to content

Commit 39e2eff

Browse files
committed
Refactoring.
1 parent 667912f commit 39e2eff

3 files changed

Lines changed: 189 additions & 159 deletions

File tree

src/Compze.TypeIdentifiers/TypeNameMapper.cs

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)