@@ -16,23 +16,26 @@ def __init__(self) -> None:
16
16
...
17
17
18
18
async def build_file (self , file : Path , compile_dir : Path ) -> Path :
19
- compile_ai_dir = compile_dir / file .stem
20
- if compile_ai_dir .exists ():
21
- for old_file in compile_ai_dir .glob ("*.class" ):
22
- old_file .unlink ()
23
- else :
24
- compile_ai_dir .mkdir (parents = True )
19
+ self .modify_class_name (file )
20
+ executable = compile_dir .joinpath (Path (f"{ file .stem } .class" ))
25
21
process = await create_subprocess_exec (
26
- "javac" , "-d" , str (compile_ai_dir ), str (file ), stdout = PIPE , stderr = PIPE
22
+ "javac" , "-d" , str (compile_dir ), str (file ), stdout = PIPE , stderr = PIPE
27
23
)
28
24
stdout , stderr = await process .communicate ()
29
25
print (stdout .decode ("utf-8" ))
30
26
if not process .returncode :
31
- class_files = list (compile_ai_dir .glob ("*.class" ))
32
- if len (class_files ) > 0 :
33
- executable = class_files [0 ]
34
- return executable .rename (compile_ai_dir / f"{ file .stem } .class" )
27
+ if executable .exists ():
28
+ return executable
35
29
else :
36
30
raise CompilerException ("File wasn't created" )
37
31
else :
38
32
raise CompilerException (stderr .decode ("utf-8" ))
33
+
34
+ @staticmethod
35
+ def modify_class_name (file ):
36
+ # Should probably use something more robust than regex
37
+ with open (file , "r" ) as f :
38
+ filedata = f .read ()
39
+ filedata = re .sub (r"(public\s+)?class\s.*\n?{" , f"class { file .stem } { "{" } \n " , filedata )
40
+ with open (file , "w" ) as f :
41
+ f .write (filedata )
0 commit comments