|
7 | 7 | */
|
8 | 8 |
|
9 | 9 | import java
|
10 |
| -import semmle.code.java.dataflow.FlowSummary |
11 |
| -import utils.modelgenerator.internal.CaptureModels |
12 |
| - |
13 |
| -/** |
14 |
| - * Returns the number of `DataFlowTargetApi`s with Summary MaD models |
15 |
| - * for a given package and provenance. |
16 |
| - */ |
17 |
| -bindingset[package] |
18 |
| -private int getNumMadModeledApis(string package, string provenance) { |
19 |
| - provenance in ["generated", "manual", "both"] and |
20 |
| - result = |
21 |
| - count(SummarizedCallable sc | |
22 |
| - package = sc.asCallable().getCompilationUnit().getPackage().getName() and |
23 |
| - sc.asCallable() instanceof DataFlowTargetApi and |
24 |
| - ( |
25 |
| - // "auto-only" |
26 |
| - sc.isAutoGenerated() and |
27 |
| - provenance = "generated" |
28 |
| - or |
29 |
| - sc.isManual() and |
30 |
| - ( |
31 |
| - if sc.hasProvenance(["generated", "ai-generated"]) |
32 |
| - then |
33 |
| - // "both" |
34 |
| - provenance = "both" |
35 |
| - else |
36 |
| - // "manual-only" |
37 |
| - provenance = "manual" |
38 |
| - ) |
39 |
| - ) |
40 |
| - ) |
41 |
| -} |
42 |
| - |
43 |
| -/** Returns the total number of `DataFlowTargetApi`s for a given package. */ |
44 |
| -private int getNumApis(string package) { |
45 |
| - result = |
46 |
| - strictcount(DataFlowTargetApi dataFlowTargApi | |
47 |
| - package = dataFlowTargApi.getCompilationUnit().getPackage().getName() |
48 |
| - ) |
49 |
| -} |
| 10 | +import GeneratedVsManualCoverageQuery |
50 | 11 |
|
51 | 12 | from
|
52 |
| - string package, int generatedOnly, int both, int manualOnly, int generated, int manual, int non, |
53 |
| - int all, float coverage, float generatedCoverage, float manualCoverage, |
54 |
| - float manualCoveredByGenerated, float generatedCoveredByManual, float match |
| 13 | + string package, int generatedOnly, int both, int manualOnly, int non, int all, float coverage, |
| 14 | + float generatedCoverage, float manualCoverage, float manualCoveredByGenerated, |
| 15 | + float generatedCoveredByManual, float match |
55 | 16 | where
|
56 |
| - // count the number of APIs with generated-only, both, and manual-only MaD models for each package |
57 |
| - generatedOnly = getNumMadModeledApis(package, "generated") and |
58 |
| - both = getNumMadModeledApis(package, "both") and |
59 |
| - manualOnly = getNumMadModeledApis(package, "manual") and |
60 |
| - // calculate the total generated and total manual numbers |
61 |
| - generated = generatedOnly + both and |
62 |
| - manual = manualOnly + both and |
63 |
| - // count the total number of `DataFlowTargetApi`s for each package |
64 |
| - all = getNumApis(package) and |
65 |
| - non = all - (generatedOnly + both + manualOnly) and |
66 |
| - // Proportion of coverage |
67 |
| - coverage = (generatedOnly + both + manualOnly).(float) / all and |
68 |
| - generatedCoverage = generated.(float) / all and |
69 |
| - manualCoverage = manual.(float) / all and |
70 |
| - // Proportion of manual models covered by generated ones |
71 |
| - manualCoveredByGenerated = both.(float) / (both + manualOnly) and |
72 |
| - // Proportion of generated models covered by manual ones |
73 |
| - generatedCoveredByManual = both.(float) / (both + generatedOnly) and |
74 |
| - // Proportion of data points that match |
75 |
| - match = (both.(float) + non) / all |
| 17 | + modelCoverageGenVsMan(package, generatedOnly, both, manualOnly, non, all, coverage, |
| 18 | + generatedCoverage, manualCoverage, manualCoveredByGenerated, generatedCoveredByManual, match, |
| 19 | + "allApis") |
76 | 20 | select package, generatedOnly, both, manualOnly, non, all, coverage, generatedCoverage,
|
77 | 21 | manualCoverage, manualCoveredByGenerated, generatedCoveredByManual, match order by package
|
0 commit comments