mirror of
https://github.com/github/codeql.git
synced 2026-04-24 08:15:14 +02:00
C#/Java: Use a parameterized module for making the source and sink callable classes.
This commit is contained in:
@@ -613,32 +613,6 @@ private class SummarizedCallableAdapter extends SummarizedCallable {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A callable where there exists a MaD sink model that applies to it.
|
||||
*/
|
||||
private class SinkModelCallableAdapter extends SinkModelCallable {
|
||||
private Provenance provenance;
|
||||
|
||||
SinkModelCallableAdapter() {
|
||||
SourceSinkInterpretationInput::sinkElement(this, _, _, provenance, _)
|
||||
}
|
||||
|
||||
override predicate hasProvenance(Provenance p) { provenance = p }
|
||||
}
|
||||
final class SourceCallable = SourceModelCallable;
|
||||
|
||||
final class SinkCallable = SinkModelCallable;
|
||||
|
||||
/**
|
||||
* A callable where there exists a MaD source model that applies to it.
|
||||
*/
|
||||
private class SourceModelCallableAdapter extends SourceModelCallable {
|
||||
private Provenance provenance;
|
||||
|
||||
SourceModelCallableAdapter() {
|
||||
SourceSinkInterpretationInput::sourceElement(this, _, _, provenance, _)
|
||||
}
|
||||
|
||||
override predicate hasProvenance(Provenance p) { provenance = p }
|
||||
}
|
||||
|
||||
final class SourceCallable = SourceModelCallable;
|
||||
|
||||
@@ -636,32 +636,6 @@ private class SummarizedCallableAdapter extends SummarizedCallable {
|
||||
override predicate hasExactModel() { summaryElement(this, _, _, _, _, _, true) }
|
||||
}
|
||||
|
||||
/**
|
||||
* A callable where there exists a MaD sink model that applies to it.
|
||||
*/
|
||||
private class SinkModelCallableAdapter extends SinkModelCallable {
|
||||
private Provenance provenance;
|
||||
|
||||
SinkModelCallableAdapter() {
|
||||
SourceSinkInterpretationInput::sinkElement(this, _, _, provenance, _)
|
||||
}
|
||||
|
||||
override predicate hasProvenance(Provenance p) { provenance = p }
|
||||
}
|
||||
|
||||
final class SinkCallable = SinkModelCallable;
|
||||
|
||||
/**
|
||||
* A callable where there exists a MaD source model that applies to it.
|
||||
*/
|
||||
private class SourceModelCallableAdapter extends SourceModelCallable {
|
||||
private Provenance provenance;
|
||||
|
||||
SourceModelCallableAdapter() {
|
||||
SourceSinkInterpretationInput::sourceElement(this, _, _, provenance, _)
|
||||
}
|
||||
|
||||
override predicate hasProvenance(Provenance p) { provenance = p }
|
||||
}
|
||||
|
||||
final class SourceCallable = SourceModelCallable;
|
||||
|
||||
@@ -1808,34 +1808,37 @@ module Make<
|
||||
|
||||
final private class SourceOrSinkElementFinal = SourceOrSinkElement;
|
||||
|
||||
bindingset[this]
|
||||
abstract 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() }
|
||||
signature predicate sourceOrSinkElementSig(
|
||||
Element e, string path, string kind, Provenance provenance, string model
|
||||
);
|
||||
|
||||
/**
|
||||
* Holds if this has provenance `p`.
|
||||
*/
|
||||
abstract predicate hasProvenance(Provenance p);
|
||||
private module MakeSourceOrSinkCallable<sourceOrSinkElementSig/5 sourceOrSinkElement> {
|
||||
class SourceSinkCallable extends SourceOrSinkElementFinal {
|
||||
private Provenance provenance;
|
||||
|
||||
SourceSinkCallable() { sourceOrSinkElement(this, _, _, provenance, _) }
|
||||
|
||||
/**
|
||||
* Holds if there exists a manual model that applies to this.
|
||||
*/
|
||||
predicate hasManualModel() { any(Provenance p | this.hasProvenance(p)).isManual() }
|
||||
|
||||
/**
|
||||
* Holds if this has provenance `p`.
|
||||
*/
|
||||
predicate hasProvenance(Provenance p) { provenance = p }
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A callable that has a source model.
|
||||
*/
|
||||
abstract class SourceModelCallable extends SourceSinkModelCallableBase {
|
||||
bindingset[this]
|
||||
SourceModelCallable() { exists(this) }
|
||||
}
|
||||
class SourceModelCallable = MakeSourceOrSinkCallable<sourceElement/5>::SourceSinkCallable;
|
||||
|
||||
/**
|
||||
* A callable that has a sink model.
|
||||
*/
|
||||
abstract class SinkModelCallable extends SourceSinkModelCallableBase {
|
||||
bindingset[this]
|
||||
SinkModelCallable() { exists(this) }
|
||||
}
|
||||
class SinkModelCallable = MakeSourceOrSinkCallable<sinkElement/5>::SourceSinkCallable;
|
||||
|
||||
/** A source or sink relevant for testing. */
|
||||
signature class RelevantSourceOrSinkElementSig extends SourceOrSinkElement {
|
||||
|
||||
Reference in New Issue
Block a user