C#/Java: Use a parameterized module for making the source and sink callable classes.

This commit is contained in:
Michael Nebel
2024-08-14 09:26:28 +02:00
parent 046018fa25
commit f0817dc07c
3 changed files with 22 additions and 71 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 {