Skip to content

Commit 7f89a30

Browse files
committed
C#: Improve the type ID construction and display name for extension types.
1 parent 5c44c08 commit 7f89a30

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed

csharp/extractor/Semmle.Extraction.CSharp/CodeAnalysisExtensions/SymbolExtensions.cs

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -277,14 +277,18 @@ private static void BuildFunctionPointerTypeId(this IFunctionPointerTypeSymbol f
277277
public static IEnumerable<IFieldSymbol?> GetTupleElementsMaybeNull(this INamedTypeSymbol type) =>
278278
type.TupleElements;
279279

280-
private static string GetExtensionTypeName(this INamedTypeSymbol named, Context cx)
280+
private static void BuildExtensionTypeId(this INamedTypeSymbol named, Context cx, EscapingTextWriter trapFile)
281281
{
282-
var type = named.ExtensionParameter?.Type.Name;
283-
if (type is null)
282+
trapFile.Write("extension(");
283+
if (named.ExtensionMarkerName is not null)
284284
{
285-
cx.ModelError(named, "Failed to get extension method type.");
285+
trapFile.Write(named.ExtensionMarkerName);
286286
}
287-
return $"extension({type ?? "unknown"})";
287+
else
288+
{
289+
trapFile.Write("unknown");
290+
}
291+
trapFile.Write(")");
288292
}
289293

290294
private static void BuildQualifierAndName(INamedTypeSymbol named, Context cx, EscapingTextWriter trapFile, ISymbol symbolBeingDefined)
@@ -307,8 +311,7 @@ private static void BuildQualifierAndName(INamedTypeSymbol named, Context cx, Es
307311
}
308312
else if (named.IsExtension)
309313
{
310-
var name = GetExtensionTypeName(named, cx);
311-
trapFile.Write(name);
314+
named.BuildExtensionTypeId(cx, trapFile);
312315
}
313316
else
314317
{
@@ -489,6 +492,20 @@ public static void BuildFunctionPointerSignature(IFunctionPointerTypeSymbol funp
489492
private static void BuildFunctionPointerTypeDisplayName(this IFunctionPointerTypeSymbol funptr, Context cx, TextWriter trapFile) =>
490493
BuildFunctionPointerSignature(funptr, trapFile, s => s.BuildDisplayName(cx, trapFile));
491494

495+
private static void BuildExtensionTypeDisplayName(this INamedTypeSymbol named, Context cx, TextWriter trapFile)
496+
{
497+
trapFile.Write("extension(");
498+
if (named.ExtensionParameter?.Type is ITypeSymbol type)
499+
{
500+
type.BuildDisplayName(cx, trapFile);
501+
}
502+
else
503+
{
504+
trapFile.Write("unknown");
505+
}
506+
trapFile.Write(")");
507+
}
508+
492509
private static void BuildNamedTypeDisplayName(this INamedTypeSymbol namedType, Context cx, TextWriter trapFile, bool constructUnderlyingTupleType)
493510
{
494511
if (!constructUnderlyingTupleType && namedType.IsTupleType)
@@ -510,8 +527,7 @@ private static void BuildNamedTypeDisplayName(this INamedTypeSymbol namedType, C
510527

511528
if (namedType.IsExtension)
512529
{
513-
var name = GetExtensionTypeName(namedType, cx);
514-
trapFile.Write(name);
530+
namedType.BuildExtensionTypeDisplayName(cx, trapFile);
515531
return;
516532
}
517533

0 commit comments

Comments
 (0)