@@ -10,6 +10,7 @@ import exprs.Call
1010private import commons.QualifiedName
1111private import commons.Collections
1212private import semmle.code.csharp.ExprOrStmtParent
13+ private import semmle.code.csharp.internal.Callable
1314private import semmle.code.csharp.metrics.Complexity
1415private import TypeRef
1516
@@ -221,24 +222,9 @@ class Callable extends Parameterizable, ExprOrStmtParent, @callable {
221222
222223 /** Gets a `Call` that has this callable as a target. */
223224 Call getACall ( ) { this = result .getTarget ( ) }
224-
225- /** Holds if this callable is declared in an extension type. */
226- predicate isInExtension ( ) { this .getDeclaringType ( ) instanceof ExtensionType }
227225}
228226
229- /**
230- * A callable that is declared as an extension.
231- *
232- * Either an extension method (`ExtensionMethod`), an extension operator
233- * (`ExtensionOperator`) or an extension accessor (`ExtensionAccessor`).
234- */
235- abstract class ExtensionCallable extends Callable {
236- /** Gets the type being extended by this method. */
237- pragma [ noinline]
238- Type getExtendedType ( ) { result = this .getDeclaringType ( ) .( ExtensionType ) .getExtendedType ( ) }
239-
240- override string getAPrimaryQlClass ( ) { result = "ExtensionCallable" }
241- }
227+ final class ExtensionCallable = ExtensionCallableImpl ;
242228
243229/**
244230 * A method, for example
@@ -315,15 +301,7 @@ class Method extends Callable, Virtualizable, Attributable, @method {
315301 override string getAPrimaryQlClass ( ) { result = "Method" }
316302}
317303
318- /**
319- * An extension method.
320- *
321- * Either a classic extension method (`ClassicExtensionMethod`) or an extension
322- * type extension method (`ExtensionTypeExtensionMethod`).
323- */
324- abstract class ExtensionMethod extends ExtensionCallable , Method {
325- override string getAPrimaryQlClass ( ) { result = "ExtensionMethod" }
326- }
304+ final class ExtensionMethod = ExtensionMethodImpl ;
327305
328306/**
329307 * An extension method, for example
@@ -334,7 +312,7 @@ abstract class ExtensionMethod extends ExtensionCallable, Method {
334312 * }
335313 * ```
336314 */
337- class ClassicExtensionMethod extends ExtensionMethod {
315+ class ClassicExtensionMethod extends ExtensionMethodImpl {
338316 ClassicExtensionMethod ( ) { this .isClassicExtensionMethod ( ) }
339317
340318 pragma [ noinline]
@@ -354,7 +332,7 @@ class ClassicExtensionMethod extends ExtensionMethod {
354332 * }
355333 * ```
356334 */
357- class ExtensionTypeExtensionMethod extends ExtensionMethod {
335+ class ExtensionTypeExtensionMethod extends ExtensionMethodImpl {
358336 ExtensionTypeExtensionMethod ( ) { this .isInExtension ( ) }
359337}
360338
@@ -589,7 +567,7 @@ class RecordCloneMethod extends Method {
589567 * }
590568 * ```
591569 */
592- class ExtensionOperator extends ExtensionCallable , Operator {
570+ class ExtensionOperator extends ExtensionCallableImpl , Operator {
593571 ExtensionOperator ( ) { this .isInExtension ( ) }
594572}
595573
0 commit comments