11#! py -3
22from pathlib import Path
3+ import pprint
4+
5+
6+ # def extract(line, token):
7+ # tag = line.split(token)[1]
8+ # return tag.split("}")[0].strip()
9+
10+ class Flags :
11+ discard = ["{Requires:" ]
12+ def __init__ (self , lines ):
13+ self .flaglines = []
14+ for line in lines :
15+ if line .startswith ("//" ):
16+ self .flaglines .append (line )
17+ else :
18+ break # Only capture top block
19+ self .flaglines = [line for line in self .flaglines if line .startswith ("// {" )]
20+ self .flaglines = [line for line in self .flaglines if not [d for d in Flags .discard if d in line ]]
21+ self .flags = dict ()
22+ for flag in self .flaglines :
23+ flag = flag [flag .index ("{" ) + 1 : flag .index ("}" )].strip ()
24+ if ":" in flag :
25+ fl , arg = flag .split (":" )
26+ fl = fl .strip ()
27+ arg = arg .strip ()
28+ self .flags [fl ] = arg
29+ else :
30+ self .flags [flag ] = None # Make an entry, but no arg
31+
32+ def __repr__ (self ):
33+ return pprint .pformat (self .flags )
34+
35+ def __len__ (self ):
36+ return len (self .flaglines )
37+
38+ def keys (self ):
39+ return {key for key in self .flags .keys ()}
40+
41+ def values (self ):
42+ return str (self .flags .values ())
43+
344
4- base = Path ("ExtractedExamples" )
545
6- def extract (line , token ):
7- tag = line .split (token )[1 ]
8- return tag .split ("}" )[0 ].strip ()
946
1047class RunnableFile :
48+
1149 def __init__ (self , path , body ):
1250 self .path = path
1351 self .name = path .stem
14- self .relative = path .relative_to (base )
52+ self .relative = path .relative_to (RunFiles . base )
1553 self .body = body
1654 self .lines = body .splitlines ()
55+ self .flags = Flags (self .lines )
1756 self .package = ""
18- self .args = ""
19- self .jvm_args = ""
57+ # self.args = ""
58+ # self.jvm_args = ""
59+ # self.brace_cmds = ""
2060 for line in self .lines :
21- if "{Args:" in line :
22- self .args = extract (line ,"{Args:" )
23- if "{JVMArgs:" in line :
24- self .jvm_args = extract (line ,"{JVMArgs:" ) + " "
61+ # if "{Args:" in line:
62+ # self.args = extract(line,"{Args:")
63+ # if "{JVMArgs:" in line:
64+ # self.jvm_args = extract(line,"{JVMArgs:") + " "
2565 if line .startswith ("package " ):
2666 self .package = line .split ("package " )[1 ].strip ()[:- 1 ]
2767 if self .package .replace ('.' , '/' ) not in self .lines [0 ]:
2868 self .package = ""
69+ # if line.startswith("// {"):
70+ # self.brace_cmds += line + "\n"
2971
3072 def __repr__ (self ):
3173 return str (self .relative ) + "\n " #+ self.header
@@ -36,17 +78,35 @@ def finaldot(self):
3678 def runCommand (self ):
3779 return "java " + self .jvm_args + self .package + self .finaldot () + self .name + " " + self .args
3880
39- runFiles = []
4081
41- for java in base .glob ("**/*.java" ):
42- with java .open () as code :
43- body = code .read ()
44- if "static void main(String[] args)" in body :
45- runFiles .append (RunnableFile (java , body ))
82+ class RunFiles :
83+ base = Path ("ExtractedExamples" )
84+ def __init__ (self ):
85+ self .runFiles = []
86+ for java in RunFiles .base .rglob ("*.java" ):
87+ with java .open () as code :
88+ body = code .read ()
89+ if "static void main(String[] args)" in body :
90+ self .runFiles .append (RunnableFile (java , body ))
91+
92+ def allFlagKeys (self ):
93+ flagkeys = set ()
94+ for f in [f for f in self .runFiles if f .flags ]:
95+ [flagkeys .add (key ) for key in f .flags .keys ()]
96+ return flagkeys
97+
98+ def allFlagValues (self ):
99+ return [f .flags .values () for f in self .runFiles if f .flags if f .flags .values ()]
100+
101+ def allFlags (self ):
102+ return [f .flags for f in self .runFiles if f .flags ]
103+
104+ def runCommands (self ):
105+ return [f .runCommand () for f in self .runFiles ]
46106
107+ if __name__ == '__main__' :
108+ runFiles = RunFiles ()
109+ pprint .pprint (runFiles .allFlags ())
110+ pprint .pprint (runFiles .runCommands ())
47111
48112
49- [print ("JVM:" , f .jvm_args ) for f in runFiles if f .jvm_args ]
50- [print ("Args:" , f .args ) for f in runFiles if f .args ]
51- [print ("Pkg:" , f .package ) for f in runFiles if f .package ]
52- [print (f .runCommand ()) for f in runFiles ]
0 commit comments