Skip to content

Commit 127d66c

Browse files
committed
Remove unneeded ReducedExtension method handling
1 parent e05e236 commit 127d66c

File tree

3 files changed

+14
-82
lines changed

3 files changed

+14
-82
lines changed

csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs

Lines changed: 3 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,6 @@ protected void PopulateParameters()
2020
IEnumerable<IParameterSymbol> parameters = Symbol.Parameters;
2121
IEnumerable<IParameterSymbol> originalParameters = originalMethod.Symbol.Parameters;
2222

23-
if (IsReducedExtension)
24-
{
25-
if (this == originalMethod)
26-
{
27-
// Non-generic reduced extensions must be extracted exactly like the
28-
// non-reduced counterparts
29-
parameters = Symbol.ReducedFrom!.Parameters;
30-
}
31-
else
32-
{
33-
// Constructed reduced extensions are special because their non-reduced
34-
// counterparts are not constructed. Therefore, we need to manually add
35-
// the `this` parameter based on the type of the receiver
36-
var originalThisParamSymbol = originalMethod.Symbol.Parameters.First();
37-
var originalThisParam = Parameter.Create(Context, originalThisParamSymbol, originalMethod);
38-
ConstructedExtensionParameter.Create(Context, this, originalThisParam);
39-
originalParameters = originalParameters.Skip(1);
40-
}
41-
}
42-
4323
foreach (var p in parameters.Zip(originalParameters, (paramSymbol, originalParam) => new { paramSymbol, originalParam }))
4424
{
4525
var original = SymbolEqualityComparer.Default.Equals(p.paramSymbol, p.originalParam)
@@ -208,9 +188,7 @@ protected static void AddParametersToId(Context cx, EscapingTextWriter trapFile,
208188
trapFile.Write('(');
209189
var index = 0;
210190

211-
var @params = method.MethodKind == MethodKind.ReducedExtension
212-
? method.ReducedFrom!.Parameters
213-
: method.Parameters;
191+
var @params = method.Parameters;
214192

215193
foreach (var param in @params)
216194
{
@@ -301,10 +279,7 @@ public static void AddExplicitInterfaceQualifierToId(Context cx, EscapingTextWri
301279
}
302280
}
303281

304-
public Method OriginalDefinition =>
305-
IsReducedExtension
306-
? Create(Context, Symbol.ReducedFrom!)
307-
: Create(Context, Symbol.OriginalDefinition);
282+
public Method OriginalDefinition => Create(Context, Symbol.OriginalDefinition);
308283

309284
public override Location? FullLocation => ReportingLocation;
310285

@@ -322,9 +297,7 @@ public static void AddExplicitInterfaceQualifierToId(Context cx, EscapingTextWri
322297

323298
public bool IsBoundGeneric => IsGeneric && !IsUnboundGeneric;
324299

325-
private bool IsReducedExtension => Symbol.MethodKind == MethodKind.ReducedExtension;
326-
327-
protected IMethodSymbol ConstructedFromSymbol => Symbol.ConstructedFrom.ReducedFrom ?? Symbol.ConstructedFrom;
300+
protected IMethodSymbol ConstructedFromSymbol => Symbol.ConstructedFrom;
328301

329302
bool IExpressionParentEntity.IsTopLevelParent => true;
330303

csharp/extractor/Semmle.Extraction.CSharp/Entities/OrdinaryMethod.cs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,7 @@ private OrdinaryMethod(Context cx, IMethodSymbol init)
1515

1616
protected override IMethodSymbol BodyDeclaringSymbol => Symbol.PartialImplementationPart ?? Symbol;
1717

18-
public IMethodSymbol SourceDeclaration
19-
{
20-
get
21-
{
22-
var reducedFrom = Symbol.ReducedFrom ?? Symbol;
23-
return reducedFrom.OriginalDefinition;
24-
}
25-
}
18+
public IMethodSymbol SourceDeclaration => Symbol.OriginalDefinition;
2619

2720
public override Microsoft.CodeAnalysis.Location ReportingLocation => Symbol.GetSymbolLocation();
2821

@@ -53,7 +46,15 @@ public override void Populate(TextWriter trapFile)
5346
ExtractCompilerGenerated(trapFile);
5447
}
5548

56-
public static new OrdinaryMethod Create(Context cx, IMethodSymbol method) => OrdinaryMethodFactory.Instance.CreateEntityFromSymbol(cx, method);
49+
public static new OrdinaryMethod Create(Context cx, IMethodSymbol method)
50+
{
51+
if (method.MethodKind == MethodKind.ReducedExtension)
52+
{
53+
cx.Extractor.Logger.Log(Util.Logging.Severity.Warning, "Reduced extension method symbols should not be directly extracted.");
54+
}
55+
56+
return OrdinaryMethodFactory.Instance.CreateEntityFromSymbol(cx, method);
57+
}
5758

5859
private class OrdinaryMethodFactory : CachedEntityFactory<IMethodSymbol, OrdinaryMethod>
5960
{

csharp/extractor/Semmle.Extraction.CSharp/Entities/Parameter.cs

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,7 @@ public enum Kind
2727
None, Ref, Out, Params, This, In
2828
}
2929

30-
protected virtual int Ordinal
31-
{
32-
get
33-
{
34-
// For some reason, methods of kind ReducedExtension
35-
// omit the "this" parameter, so the parameters are
36-
// actually numbered from 1.
37-
// This is to be consistent from the original (unreduced) extension method.
38-
var isReducedExtension =
39-
Symbol.ContainingSymbol is IMethodSymbol method &&
40-
method.MethodKind == MethodKind.ReducedExtension;
41-
return Symbol.Ordinal + (isReducedExtension ? 1 : 0);
42-
}
43-
}
30+
protected virtual int Ordinal => Symbol.Ordinal;
4431

4532
private Kind ParamKind
4633
{
@@ -270,33 +257,4 @@ private class VarargsParamFactory : CachedEntityFactory<Method, VarargsParam>
270257
public override VarargsParam Create(Context cx, Method init) => new VarargsParam(cx, init);
271258
}
272259
}
273-
274-
internal class ConstructedExtensionParameter : Parameter
275-
{
276-
private readonly ITypeSymbol constructedType;
277-
278-
private ConstructedExtensionParameter(Context cx, Method method, Parameter original)
279-
: base(cx, original.Symbol, method, original)
280-
{
281-
constructedType = method.Symbol.ReceiverType!;
282-
}
283-
284-
public override void Populate(TextWriter trapFile)
285-
{
286-
var typeKey = Type.Create(Context, constructedType);
287-
trapFile.@params(this, Original.Symbol.Name, typeKey.TypeRef, 0, Kind.This, Parent!, Original);
288-
trapFile.param_location(this, Original.Location);
289-
}
290-
291-
public static ConstructedExtensionParameter Create(Context cx, Method method, Parameter parameter) =>
292-
ExtensionParamFactory.Instance.CreateEntity(cx, (new SymbolEqualityWrapper(parameter.Symbol), new SymbolEqualityWrapper(method.Symbol.ReceiverType!)), (method, parameter));
293-
294-
private class ExtensionParamFactory : CachedEntityFactory<(Method, Parameter), ConstructedExtensionParameter>
295-
{
296-
public static ExtensionParamFactory Instance { get; } = new ExtensionParamFactory();
297-
298-
public override ConstructedExtensionParameter Create(Context cx, (Method, Parameter) init) =>
299-
new ConstructedExtensionParameter(cx, init.Item1, init.Item2);
300-
}
301-
}
302260
}

0 commit comments

Comments
 (0)