@@ -17,8 +17,10 @@ private import semmle.code.csharp.security.dataflow.flowsources.Remote
1717class TestLibrary extends RefType {
1818 TestLibrary ( ) {
1919 this .getNamespace ( )
20- .getName ( )
21- .matches ( [ "NUnit.Framework%" , "Xunit%" , "Microsoft.VisualStudio.TestTools.UnitTesting%" ] )
20+ .getQualifiedName ( )
21+ .matches ( [
22+ "NUnit.Framework%" , "Xunit%" , "Microsoft.VisualStudio.TestTools.UnitTesting%" , "Moq%"
23+ ] )
2224 }
2325}
2426
@@ -114,29 +116,39 @@ class ExternalApi extends DotNet::Callable {
114116int resultLimit ( ) { result = 1000 }
115117
116118/**
117- * Holds if the relevant usage count of `api` is `usages `.
119+ * Holds if it is relevant to count usages of `api`.
118120 */
119- signature predicate relevantUsagesSig ( ExternalApi api , int usages ) ;
121+ signature predicate relevantApi ( ExternalApi api ) ;
120122
121123/**
122124 * Given a predicate to count relevant API usages, this module provides a predicate
123125 * for restricting the number or returned results based on a certain limit.
124126 */
125- module Results< relevantUsagesSig / 2 getRelevantUsages> {
126- private int getOrder ( ExternalApi api ) {
127- api =
128- rank [ result ] ( ExternalApi a , int usages |
129- getRelevantUsages ( a , usages )
127+ module Results< relevantApi / 1 getRelevantUsages> {
128+ private int getUsages ( string apiInfo ) {
129+ result =
130+ strictcount ( DispatchCall c , ExternalApi api |
131+ c = api .getACall ( ) and
132+ apiInfo = api .getInfo ( ) and
133+ getRelevantUsages ( api )
134+ )
135+ }
136+
137+ private int getOrder ( string apiInfo ) {
138+ apiInfo =
139+ rank [ result ] ( string info , int usages |
140+ usages = getUsages ( info )
130141 |
131- a order by usages desc , a . getInfo ( )
142+ info order by usages desc , info
132143 )
133144 }
134145
135146 /**
136- * Holds if `api` is being used `usages` times and if it is
137- * in the top results (guarded by resultLimit).
147+ * Holds if there exists an API with `apiInfo` that is being used `usages` times
148+ * and if it is in the top results (guarded by resultLimit).
138149 */
139- predicate restrict ( ExternalApi api , int usages ) {
140- getRelevantUsages ( api , usages ) and getOrder ( api ) <= resultLimit ( )
150+ predicate restrict ( string apiInfo , int usages ) {
151+ usages = getUsages ( apiInfo ) and
152+ getOrder ( apiInfo ) <= resultLimit ( )
141153 }
142154}
0 commit comments