mirror of
https://github.com/github/codeql.git
synced 2025-12-17 17:23:36 +01:00
45 lines
1.6 KiB
Plaintext
45 lines
1.6 KiB
Plaintext
import semmle.code.csharp.dataflow.FlowSummary
|
|
import semmle.code.csharp.dataflow.internal.FlowSummaryImpl::Private::TestOutput
|
|
|
|
abstract class IncludeSummarizedCallable extends RelevantSummarizedCallable {
|
|
IncludeSummarizedCallable() {
|
|
[this.(Modifiable), this.(Accessor).getDeclaration()].isEffectivelyPublic()
|
|
}
|
|
|
|
/** Gets the qualified parameter types of this callable as a comma-separated string. */
|
|
private string parameterQualifiedTypeNamesToString() {
|
|
result =
|
|
concat(Parameter p, int i |
|
|
p = this.getParameter(i)
|
|
|
|
|
p.getType().getQualifiedName(), "," order by i
|
|
)
|
|
}
|
|
|
|
/** Holds if the summary should apply for all overrides of this. */
|
|
predicate isBaseCallableOrPrototype() {
|
|
this.getDeclaringType() instanceof Interface
|
|
or
|
|
exists(Modifiable m | m = [this.(Modifiable), this.(Accessor).getDeclaration()] |
|
|
m.isAbstract()
|
|
or
|
|
this.getDeclaringType().(Modifiable).isAbstract() and m.(Virtualizable).isVirtual()
|
|
)
|
|
}
|
|
|
|
/** Gets a string representing, whether the summary should apply for all overrides of this. */
|
|
private string getCallableOverride() {
|
|
if this.isBaseCallableOrPrototype() then result = "true" else result = "false"
|
|
}
|
|
|
|
/** Gets a string representing the callable in semi-colon separated format for use in flow summaries. */
|
|
final override string getCallableCsv() {
|
|
exists(string namespace, string type |
|
|
this.getDeclaringType().hasQualifiedName(namespace, type) and
|
|
result =
|
|
namespace + ";" + type + ";" + this.getCallableOverride() + ";" + this.getName() + ";" + "("
|
|
+ parameterQualifiedTypeNamesToString() + ")"
|
|
)
|
|
}
|
|
}
|