Skip to content

Commit 9564f8b

Browse files
committed
Java: Put remainings parts of the generator code into the class.
1 parent 20414c0 commit 9564f8b

File tree

1 file changed

+47
-36
lines changed

1 file changed

+47
-36
lines changed

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

Lines changed: 47 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
import sys
99
import tempfile
1010

11-
language = "java"
12-
1311
class Generator:
1412
def __init__ (self, language):
1513
self.language = language
@@ -18,6 +16,7 @@ def __init__ (self, language):
1816
self.generateSummaries = False
1917
self.dryRun = False
2018

19+
2120
def printHelp(self):
2221
print(f"""Usage:
2322
python3 GenerateFlowModel.py <library-database> <outputQll> [--with-sinks] [--with-sources] [--with-summaries] [--dry-run]
@@ -57,6 +56,7 @@ def setenvironment(self, target, database):
5756
self.workDir = tempfile.mkdtemp()
5857
os.makedirs(self.generatedFrameworks, exist_ok=True)
5958

59+
6060
@staticmethod
6161
def make(language):
6262
generator = Generator(language)
@@ -90,6 +90,7 @@ def make(language):
9090
generator.setenvironment(sys.argv[2], sys.argv[1])
9191
return generator
9292

93+
9394
def runQuery(self, infoMessage, query):
9495
print("########## Querying " + infoMessage + "...")
9596
queryFile = os.path.join(os.path.dirname(
@@ -147,50 +148,60 @@ def asCsvModel(self, superclass, kind, rows):
147148
return classTemplate.format(self.shortname[0].upper() + self.shortname[1:], kind.capitalize(), superclass, rows)
148149

149150

150-
generator = Generator.make(language)
151+
def makeContent(self):
152+
if self.generateSummaries:
153+
summaryRows = self.runQuery("summary models", "CaptureSummaryModels.ql")
154+
summaryCsv = self.asCsvModel("SummaryModelCsv", "summary", summaryRows)
155+
else:
156+
summaryCsv = ""
151157

152-
if generator.generateSummaries:
153-
summaryRows = generator.runQuery("summary models", "CaptureSummaryModels.ql")
154-
summaryCsv = generator.asCsvModel("SummaryModelCsv", "summary", summaryRows)
155-
else:
156-
summaryCsv = ""
158+
if self.generateSinks:
159+
sinkRows = self.runQuery("sink models", "CaptureSinkModels.ql")
160+
sinkCsv = self.asCsvModel("SinkModelCsv", "sinks", sinkRows)
161+
else:
162+
sinkCsv = ""
157163

158-
if generator.generateSinks:
159-
sinkRows = generator.runQuery("sink models", "CaptureSinkModels.ql")
160-
sinkCsv = generator.asCsvModel("SinkModelCsv", "sinks", sinkRows)
161-
else:
162-
sinkCsv = ""
164+
if self.generateSources:
165+
sourceRows = self.runQuery("source models", "CaptureSourceModels.ql")
166+
sourceCsv = self.asCsvModel("SourceModelCsv", "sources", sourceRows)
167+
else:
168+
sourceCsv = ""
163169

164-
if generator.generateSources:
165-
sourceRows = generator.runQuery("source models", "CaptureSourceModels.ql")
166-
sourceCsv = generator.asCsvModel("SourceModelCsv", "sources", sourceRows)
167-
else:
168-
sourceCsv = ""
170+
return f"""
171+
/** Definitions of taint steps in the {self.shortname} framework */
169172
170-
qllContents = f"""
171-
/** Definitions of taint steps in the {generator.shortname} framework */
172-
173-
import {generator.language}
174-
private import semmle.code.{generator.language}.dataflow.ExternalFlow
173+
import {self.language}
174+
private import semmle.code.{self.language}.dataflow.ExternalFlow
175175
176176
{sinkCsv}
177177
{sourceCsv}
178178
{summaryCsv}
179179
180-
"""
180+
"""
181181

182-
if generator.dryRun:
183-
print("CSV Models generated, but not written to file.")
184-
sys.exit(0)
185182

186-
with open(generator.frameworkTarget, "w") as frameworkQll:
187-
frameworkQll.write(qllContents)
183+
def save(self, content):
184+
with open(self.frameworkTarget, "w") as frameworkQll:
185+
frameworkQll.write(content)
188186

189-
cmd = ['codeql', 'query', 'format', '--in-place', generator.frameworkTarget]
190-
ret = subprocess.call(cmd)
191-
if ret != 0:
192-
print("Failed to format query. Failed command was: " + shlex.join(cmd))
193-
sys.exit(1)
187+
cmd = ['codeql', 'query', 'format', '--in-place', self.frameworkTarget]
188+
ret = subprocess.call(cmd)
189+
if ret != 0:
190+
print("Failed to format query. Failed command was: " + shlex.join(cmd))
191+
sys.exit(1)
192+
193+
print("")
194+
print("CSV model written to " + self.frameworkTarget)
195+
196+
197+
def run(self):
198+
content = self.makeContent()
194199

195-
print("")
196-
print("CSV model written to " + generator.frameworkTarget)
200+
if self.dryRun:
201+
print("CSV Models generated, but not written to file.")
202+
sys.exit(0)
203+
204+
self.save(content)
205+
206+
language = "java"
207+
Generator.make(language).run()

0 commit comments

Comments
 (0)