Skip to content

Commit bda6dc1

Browse files
committed
C#: Extract the receiver type for extension types.
1 parent 146d172 commit bda6dc1

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/NamedType.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,20 @@ public override void Populate(TextWriter trapFile)
9090
{
9191
trapFile.anonymous_types(this);
9292
}
93+
94+
if (Symbol.IsExtension && Symbol.ExtensionParameter is IParameterSymbol parameter)
95+
{
96+
// For some reason an extension type has a receiver parameter with an empty name
97+
// even when there is no parameter.
98+
if (!string.IsNullOrEmpty(parameter.Name))
99+
{
100+
Parameter.Create(Context, parameter, this);
101+
}
102+
103+
// Use the parameter type as the receiver type.
104+
var receiverType = Type.Create(Context, parameter.Type).TypeRef;
105+
trapFile.extension_receiver_type(this, receiverType);
106+
}
93107
}
94108

95109
private readonly Lazy<Type[]> typeArgumentsLazy;

csharp/extractor/Semmle.Extraction.CSharp/Trap/Tuples.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,9 @@ internal static void exprorstmt_name(this TextWriter trapFile, IEntity expr, str
202202
internal static void extend(this TextWriter trapFile, Type type, Type super) =>
203203
trapFile.WriteTuple("extend", type, super);
204204

205+
internal static void extension_receiver_type(this TextWriter trapFile, Type @extension, Type receiverType) =>
206+
trapFile.WriteTuple("extension_receiver_type", extension, receiverType);
207+
205208
internal static void anonymous_types(this TextWriter trapFile, Type type) =>
206209
trapFile.WriteTuple("anonymous_types", type);
207210

0 commit comments

Comments
 (0)