Skip to content

Commit f209eed

Browse files
committed
C#: Extractor- and library support for explicit interface implementations for operators.
1 parent 51be175 commit f209eed

File tree

4 files changed

+9
-2
lines changed

4 files changed

+9
-2
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ internal class Conversion : UserOperator
1010
private Conversion(Context cx, IMethodSymbol init)
1111
: base(cx, init) { }
1212

13+
protected override MethodKind ExplicitlyImplementsKind => MethodKind.Conversion;
14+
1315
public static new Conversion Create(Context cx, IMethodSymbol symbol) =>
1416
ConversionFactory.Instance.CreateEntityFromSymbol(cx, symbol);
1517

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,12 @@ public static void NumberOfLines(TextWriter trapFile, ISymbol symbol, IEntity ca
8383
}
8484
}
8585

86+
protected virtual MethodKind ExplicitlyImplementsKind => MethodKind.Ordinary;
87+
8688
public void Overrides(TextWriter trapFile)
8789
{
8890
foreach (var explicitInterface in Symbol.ExplicitInterfaceImplementations
89-
.Where(sym => sym.MethodKind == MethodKind.Ordinary)
91+
.Where(sym => sym.MethodKind == ExplicitlyImplementsKind)
9092
.Select(impl => Type.Create(Context, impl.ContainingType)))
9193
{
9294
trapFile.explicitly_implements(this, explicitInterface.TypeRef);

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ internal class UserOperator : Method
1111
protected UserOperator(Context cx, IMethodSymbol init)
1212
: base(cx, init) { }
1313

14+
protected override MethodKind ExplicitlyImplementsKind => MethodKind.UserDefinedOperator;
15+
1416
public override void Populate(TextWriter trapFile)
1517
{
1618
PopulateMethod(trapFile);
@@ -37,6 +39,7 @@ public override void Populate(TextWriter trapFile)
3739
}
3840

3941
ContainingType.PopulateGenerics();
42+
Overrides(trapFile);
4043
}
4144

4245
public override bool NeedsPopulation => Context.Defines(Symbol) || IsImplicitOperator(out _);

csharp/ql/lib/semmle/code/csharp/Callable.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ class Destructor extends DotNet::Destructor, Callable, Member, Attributable, @de
434434
* Either a unary operator (`UnaryOperator`), a binary operator
435435
* (`BinaryOperator`), or a conversion operator (`ConversionOperator`).
436436
*/
437-
class Operator extends Callable, Member, Attributable, @operator {
437+
class Operator extends Callable, Member, Attributable, Overridable, @operator {
438438
/**
439439
* DEPRECATED: use `getFunctionName()` instead.
440440
*

0 commit comments

Comments
 (0)