Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit bc10fd9

Browse files
author
Benjamin Muskalla
committed
Support generating only specific models
1 parent 0e9fcc6 commit bc10fd9

1 file changed

Lines changed: 38 additions & 11 deletions

File tree

java/ql/src/utils/model-generator/GenerateFlowModel.py

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,17 @@
1111

1212
def printHelp():
1313
print("""Usage:
14-
GenerateFlowModel.py <library-database> "simpleName"
14+
GenerateFlowModel.py <library-database> "simpleName" [--with-sinks] [--with-sources] [--with-summaries]
1515
1616
This generates summary, source and sink models for the code in the database.
1717
The files will be placed in `java/ql/lib/semmle/code/java/frameworks/generated/<simpleName>/`
1818
1919
A simple name is used for the generated target files (e.g. `simpleName.qll`).
20+
Which models are generated is controlled by the flags:
21+
--with-sinks
22+
--with-sources
23+
--with-summaries
24+
If none of these flags are specified, all models are generated.
2025
2126
Requirements: `codeql` should both appear on your path.
2227
""")
@@ -26,10 +31,23 @@ def printHelp():
2631
printHelp()
2732
sys.exit(0)
2833

29-
withTests = False
30-
if "--with-tests" in sys.argv:
31-
sys.argv.remove("--with-tests")
32-
withTests = True
34+
generateSinks = False
35+
generateSources = False
36+
generateSummaries = False
37+
if "--with-sinks" in sys.argv:
38+
sys.argv.remove("--with-sinks")
39+
generateSinks = True
40+
41+
if "--with-sources" in sys.argv:
42+
sys.argv.remove("--with-sources")
43+
generateSources = True
44+
45+
if "--with-summaries" in sys.argv:
46+
sys.argv.remove("--with-summaries")
47+
generateSummaries = True
48+
49+
if not generateSinks and not generateSources and not generateSummaries:
50+
generateSinks = generateSources = generateSummaries = True
3351

3452
if len(sys.argv) != 3:
3553
printHelp()
@@ -104,14 +122,23 @@ def asCsvModel(superclass, kind, rows):
104122
return classTemplate.format(shortname[0].upper() + shortname[1:], kind.capitalize(), superclass, rows)
105123

106124

107-
summaryRows = runQuery("summary models", "CaptureSummaryModels.ql")
108-
summaryCsv = asCsvModel("SummaryModelCsv", "summary", summaryRows)
125+
if generateSummaries:
126+
summaryRows = runQuery("summary models", "CaptureSummaryModels.ql")
127+
summaryCsv = asCsvModel("SummaryModelCsv", "summary", summaryRows)
128+
else:
129+
summaryCsv = ""
109130

110-
sinkRows = runQuery("sink models", "CaptureSinkModels.ql")
111-
sinkCsv = asCsvModel("SinkModelCsv", "sinks", sinkRows)
131+
if generateSinks:
132+
sinkRows = runQuery("sink models", "CaptureSinkModels.ql")
133+
sinkCsv = asCsvModel("SinkModelCsv", "sinks", sinkRows)
134+
else:
135+
sinkCsv = ""
112136

113-
sourceRows = runQuery("source models", "CaptureSourceModels.ql")
114-
sourceCsv = asCsvModel("SourceModelCsv", "sources", sourceRows)
137+
if generateSources:
138+
sourceRows = runQuery("source models", "CaptureSourceModels.ql")
139+
sourceCsv = asCsvModel("SourceModelCsv", "sources", sourceRows)
140+
else:
141+
sourceCsv = ""
115142

116143
qllTemplate = """
117144
/** Definitions of taint steps in the {0} framework */

0 commit comments

Comments
 (0)