DataFlow: Add some shared classes for Neutrals, Source and Sink callables.

This commit is contained in:
Michael Nebel
2024-06-11 15:07:47 +02:00
parent e1317ddcb6
commit 3d53ddf919

View File

@@ -270,6 +270,20 @@ module Make<
NeutralSummaryCallable() { this.getKind() = "summary" }
}
/**
* A callable that has a neutral source model.
*/
class NeutralSourceCallable extends NeutralCallableFinal {
NeutralSourceCallable() { this.getKind() = "source" }
}
/**
* A callable that has a neutral sink model.
*/
class NeutralSinkCallable extends NeutralCallableFinal {
NeutralSinkCallable() { this.getKind() = "sink" }
}
/**
* A callable that has a neutral model.
*/
@@ -1739,6 +1753,37 @@ module Make<
)
}
final private class SourceOrSinkElementFinal = SourceOrSinkElement;
bindingset[this]
private class SourceSinkModelCallableBase extends SourceOrSinkElementFinal {
/**
* Holds if there exists a manual model that applies to this.
*/
final predicate hasManualModel() { any(Provenance p | this.hasProvenance(p)).isManual() }
/**
* Holds if this has provenance `p`.
*/
abstract predicate hasProvenance(Provenance p);
}
/**
* A callable that has a source model.
*/
abstract class SourceModelCallable extends SourceSinkModelCallableBase {
bindingset[this]
SourceModelCallable() { exists(this) }
}
/**
* A callable that has a sink model.
*/
abstract class SinkModelCallable extends SourceSinkModelCallableBase {
bindingset[this]
SinkModelCallable() { exists(this) }
}
/** A source or sink relevant for testing. */
signature class RelevantSourceOrSinkElementSig extends SourceOrSinkElement {
/** Gets the string representation of this callable used by `source/1` or `sink/1`. */