Skip to content

Commit 43ba56f

Browse files
committed
C#: Cleaup the QL implementation.
1 parent 4f43b41 commit 43ba56f

File tree

1 file changed

+21
-31
lines changed
  • csharp/ql/lib/semmle/code/csharp/exprs

1 file changed

+21
-31
lines changed

csharp/ql/lib/semmle/code/csharp/exprs/Call.qll

Lines changed: 21 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,25 @@ class Call extends Expr, @call {
267267
class MethodCall extends Call, QualifiableExpr, LateBindableExpr, @method_invocation_expr {
268268
override Method getTarget() { expr_call(this, result) }
269269

270+
/**
271+
* Gets the accessor that was used to generate this method, if any. For example, the
272+
* method call `MyExtensions.get_FirstChar(s)` on line 9 is generated from the property
273+
* accessor `get_FirstChar` on line 3 in
274+
* ```csharp
275+
* static class MyExtensions {
276+
* extension(string s) {
277+
* public char FirstChar { get { ... } }
278+
* }
279+
* }
280+
*
281+
* class A {
282+
* char M(string s) {
283+
* return MyExtensions.get_FirstChar(s);
284+
* }
285+
* }
286+
*/
287+
Accessor getTargetAccessor() { expr_call(this, result) }
288+
270289
override Method getQualifiedDeclaration() { result = this.getTarget() }
271290

272291
override string toString() { result = "call to method " + concat(this.getTarget().getName()) }
@@ -600,8 +619,8 @@ class FunctionPointerCall extends DelegateLikeCall, @function_pointer_invocation
600619

601620
/**
602621
* A call to an accessor. Either a property accessor call (`PropertyCall`),
603-
* an indexer accessor call (`IndexerCall`), an event accessor call
604-
* (`EventCall`) or an extension accessor call (`ExtensionAccessorCall`).
622+
* an indexer accessor call (`IndexerCall`) or an event accessor call
623+
* (`EventCall`).
605624
*/
606625
class AccessorCall extends Call, QualifiableExpr, @call_access_expr {
607626
override Accessor getTarget() { none() }
@@ -611,35 +630,6 @@ class AccessorCall extends Call, QualifiableExpr, @call_access_expr {
611630
override Accessor getARuntimeTarget() { result = Call.super.getARuntimeTarget() }
612631
}
613632

614-
/**
615-
* A direct call to an extension accessor, for example `MyExtensions.get_FirstChar(s)`
616-
* in
617-
* ```csharp
618-
* static class MyExtensions {
619-
* extension(string s) {
620-
* public char FirstChar { get { ... } }
621-
* }
622-
* }
623-
*
624-
* class A {
625-
* char M(string s) {
626-
* return MyExtensions.get_FirstChar(s);
627-
* }
628-
* }
629-
* ```
630-
*/
631-
class ExtensionAccessorCall extends AccessorCall, @accessor_invocation_expr {
632-
override Accessor getTarget() { expr_call(this, result) }
633-
634-
override Expr getArgument(int i) { result = this.getChild(i) and i >= 0 }
635-
636-
override string toString() {
637-
result = "call to extension accessor " + concat(this.getTarget().getName())
638-
}
639-
640-
override string getAPrimaryQlClass() { result = "ExtensionAccessorCall" }
641-
}
642-
643633
/**
644634
* A call to a property accessor, for example the call to `get_P` on
645635
* line 5 in

0 commit comments

Comments
 (0)