package Ġorg . byte camp . program _ repair . backend . server Ċ Ċ import Ġorg . apache . logging . log 4 j . Log Manager Ċ import Ġorg . apache . logging . log 4 j . Logger Ċ import Ġorg . byte camp . program _ repair . backend . configs . A stor Input Config Ċ import Ġorg . byte camp . program _ repair . backend . grpc . Repair TaskRequest Ċ import Ġorg . byte camp . program _ repair . backend . grpc . Repair Task Response Ċ import Ġorg . byte camp . program _ repair . backend . grpc . Repair Task Result Ċ import Ġjava . io . File Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . io . Print Stream ĊĊ Ċ class ĠA stor Repair Server Ġ: ĠRe pair Server Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsubmit Task ( source : ĠString , Ġtask : ĠRe pair TaskRequest ): ĠRunning Repair Task Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠA stor Repair Task ( source , Ġtask ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠA stor Repair Task ( source : ĠString , Ġval Ġtask : ĠRe pair TaskRequest ) Ġ: ĠRunning Repair Task Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger : ĠLogger Ġ= ĠLog Manager . getLogger () ĊĊĠĠĠ Ġprivate Ġval Ġsource Ġ= ĠFile ( source ). absolute File ĊĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( writer : ĠPrint Stream ): ĠRe pair Task Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠgetConfig ( writer ) ĊĠĠĠĠĠĠĠ Ġconfig . mode Ġ= Ġtask . algorithm ĊĠĠĠĠĠĠĠ Ġlogger . info (" Deleting Ġpath Ġ" Ġ+ Ġconfig . get Out Path ()) ĊĠĠĠĠĠĠĠ ĠFile ( config . get Out Path ()). delete Re cursively () ĊĠĠĠĠĠĠĠ Ġval Ġarguments : ĠString Ġ= Ġconfig . to Args (). join ToString (" Ġ") ĊĠĠĠĠĠĠĠ Ġval Ġreal Cmd Ġ= Ġ" java Ġ- cp Ġbuild / ast or . jar Ġfr . in ria . main . e volution . A stor Main Ġ$ arguments " ĊĠĠĠĠĠĠĠ Ġlogger . info (" Running Ġ$ real Cmd ") ĊĠĠĠĠĠĠĠ Ġval Ġchild Ġ= ĠRuntime . get Runtime (). exec ( real Cmd ) ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= Ġchild . inputStream ĊĠĠĠĠĠĠĠ Ġval Ġout 2 Ġ= Ġchild . error Stream ĊĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠByteArray ( 1 0 0 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( child . is Alive ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( out . available () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġout . read ( buf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bytes Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . print ( String ( buf , Ġ 0 , Ġbytes )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( out 2 . available () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġout 2 . read ( buf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bytes Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . print ( String ( buf , Ġ 0 , Ġbytes )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġbuild Ġthe Ġsuccessful Ġresult ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Config Ġ= Ġconfig . get Out Config () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Builder Ġ= ĠRe pair Task Result . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Builder . success Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( patch Ġin Ġout Config . patches ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( h unk Ġin Ġpatch . patch h unk s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠRe pair Task Result . Patch . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . modified Ġ= ĠFile ( h unk . get Modified FilePath ()). read Text ( Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . source Path Ġ= ĠFile ( h unk . getPath ()). relative To ( source ). path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Builder . add Patch ( builder . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresp Builder Ġ= ĠRe pair Task Response . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresp Builder . frame Type Ġ= ĠRe pair Task Response . Frame Type . RESULT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresp Builder . add Result ( result Builder . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresp Builder . build () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . println ( ex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresp Builder Ġ= ĠRe pair Task Response . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresp Builder . frame Type Ġ= ĠRe pair Task Response . Frame Type . RESULT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Builder Ġ= ĠRe pair Task Result . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Builder . success Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresp Builder . add Result ( result Builder . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresp Builder . build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Common Package ( file : ĠFile , Ġprefix : ĠString ): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( file . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= Ġfile . list Files () !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( files . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prefix . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Ġ+ Ġ"." Ġ+ Ġfile . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( files . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . name Ġ== Ġ" java ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Common Package ( files [ 0 ], Ġprefix ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( prefix . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Common Package ( files [ 0 ], Ġfile . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Common Package ( files [ 0 ], Ġprefix Ġ+ Ġ"." Ġ+ Ġfile . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprefix ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Build System (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= Ġif Ġ( File ( source , Ġ" build . gradle "). exists () Ġ|| ĠFile ( source , Ġ" build . gradle . k ts "). exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" gradle " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( File ( source , Ġ" pom . xml "). exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" maven " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" others " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsystem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetConfig ( writer : ĠPrint Stream ): ĠA stor Input Config Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠA stor Input Config () ĊĠĠĠĠĠĠĠ Ġconfig . location Ġ= Ġsource . path ĊĠĠĠĠĠĠĠ Ġconfig . projectName Ġ= Ġsource . name ĊĠĠĠĠĠĠĠ Ġconfig . src Ġ= ĠFile ( source , Ġ" src / main / java "). path ĊĠĠĠĠĠĠĠ Ġconfig . pkg Ġ= Ġget Common Package ( File ( source , Ġ" src / main / java "), Ġ"") ĊĠĠĠĠĠĠĠ Ġconfig . src Test Ġ= ĠFile ( source , Ġ" src / test / java "). path ĊĠĠĠĠĠĠĠ Ġconfig . out Ġ= Ġ" build / ast or " ĊĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġsource . path ĊĠĠĠĠĠĠĠ Ġwhen Ġ( get Build System ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" gradle " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . bin Ġ= Ġ"$ base / build / classes / java / main " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . bin Test Ġ= Ġ"$ base / build / classes / java / test " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" maven " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . bin Ġ= Ġ"$ base / target / classes " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . bin Test Ġ= Ġ"$ base / target / test - classes " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . println (" Does Ġnot Ġsupport Ġbuild Ġsystems Ġother Ġthan Ġgradle Ġor Ġmaven ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġconfig ĊĠĠĠ Ġ} Ċ } Ċ