@@ -270,6 +270,20 @@ module Make<
270
270
NeutralSummaryCallable ( ) { this .getKind ( ) = "summary" }
271
271
}
272
272
273
+ /**
274
+ * A callable that has a neutral source model.
275
+ */
276
+ class NeutralSourceCallable extends NeutralCallableFinal {
277
+ NeutralSourceCallable ( ) { this .getKind ( ) = "source" }
278
+ }
279
+
280
+ /**
281
+ * A callable that has a neutral sink model.
282
+ */
283
+ class NeutralSinkCallable extends NeutralCallableFinal {
284
+ NeutralSinkCallable ( ) { this .getKind ( ) = "sink" }
285
+ }
286
+
273
287
/**
274
288
* A callable that has a neutral model.
275
289
*/
@@ -1739,6 +1753,37 @@ module Make<
1739
1753
)
1740
1754
}
1741
1755
1756
+ final private class SourceOrSinkElementFinal = SourceOrSinkElement ;
1757
+
1758
+ bindingset [ this ]
1759
+ private class SourceSinkModelCallableBase extends SourceOrSinkElementFinal {
1760
+ /**
1761
+ * Holds if there exists a manual model that applies to this.
1762
+ */
1763
+ final predicate hasManualModel ( ) { any ( Provenance p | this .hasProvenance ( p ) ) .isManual ( ) }
1764
+
1765
+ /**
1766
+ * Holds if this has provenance `p`.
1767
+ */
1768
+ abstract predicate hasProvenance ( Provenance p ) ;
1769
+ }
1770
+
1771
+ /**
1772
+ * A callable that has a source model.
1773
+ */
1774
+ abstract class SourceModelCallable extends SourceSinkModelCallableBase {
1775
+ bindingset [ this ]
1776
+ SourceModelCallable ( ) { exists ( this ) }
1777
+ }
1778
+
1779
+ /**
1780
+ * A callable that has a sink model.
1781
+ */
1782
+ abstract class SinkModelCallable extends SourceSinkModelCallableBase {
1783
+ bindingset [ this ]
1784
+ SinkModelCallable ( ) { exists ( this ) }
1785
+ }
1786
+
1742
1787
/** A source or sink relevant for testing. */
1743
1788
signature class RelevantSourceOrSinkElementSig extends SourceOrSinkElement {
1744
1789
/** Gets the string representation of this callable used by `source/1` or `sink/1`. */
0 commit comments