@@ -1808,34 +1808,37 @@ module Make<
18081808
18091809 final private class SourceOrSinkElementFinal = SourceOrSinkElement ;
18101810
1811- bindingset [ this ]
1812- abstract private class SourceSinkModelCallableBase extends SourceOrSinkElementFinal {
1813- /**
1814- * Holds if there exists a manual model that applies to this.
1815- */
1816- final predicate hasManualModel ( ) { any ( Provenance p | this .hasProvenance ( p ) ) .isManual ( ) }
1811+ signature predicate sourceOrSinkElementSig (
1812+ Element e , string path , string kind , Provenance provenance , string model
1813+ ) ;
18171814
1818- /**
1819- * Holds if this has provenance `p`.
1820- */
1821- abstract predicate hasProvenance ( Provenance p ) ;
1815+ private module MakeSourceOrSinkCallable< sourceOrSinkElementSig / 5 sourceOrSinkElement> {
1816+ class SourceSinkCallable extends SourceOrSinkElementFinal {
1817+ private Provenance provenance ;
1818+
1819+ SourceSinkCallable ( ) { sourceOrSinkElement ( this , _, _, provenance , _) }
1820+
1821+ /**
1822+ * Holds if there exists a manual model that applies to this.
1823+ */
1824+ predicate hasManualModel ( ) { any ( Provenance p | this .hasProvenance ( p ) ) .isManual ( ) }
1825+
1826+ /**
1827+ * Holds if this has provenance `p`.
1828+ */
1829+ predicate hasProvenance ( Provenance p ) { provenance = p }
1830+ }
18221831 }
18231832
18241833 /**
18251834 * A callable that has a source model.
18261835 */
1827- abstract class SourceModelCallable extends SourceSinkModelCallableBase {
1828- bindingset [ this ]
1829- SourceModelCallable ( ) { exists ( this ) }
1830- }
1836+ class SourceModelCallable = MakeSourceOrSinkCallable< sourceElement / 5 > :: SourceSinkCallable ;
18311837
18321838 /**
18331839 * A callable that has a sink model.
18341840 */
1835- abstract class SinkModelCallable extends SourceSinkModelCallableBase {
1836- bindingset [ this ]
1837- SinkModelCallable ( ) { exists ( this ) }
1838- }
1841+ class SinkModelCallable = MakeSourceOrSinkCallable< sinkElement / 5 > :: SourceSinkCallable ;
18391842
18401843 /** A source or sink relevant for testing. */
18411844 signature class RelevantSourceOrSinkElementSig extends SourceOrSinkElement {
0 commit comments