package Ġsystems . danger . kotlin Ċ Ċ import Ġsystems . danger . kotlin . json . Json Parser Ċ import Ġsystems . danger . kotlin . models . danger . Concurrent D anger Results Ċ import Ġsystems . danger . kotlin . models . danger . DSL Ċ import Ġsystems . danger . kotlin . models . danger . D anger DSL Ċ import Ġsystems . danger . kotlin . models . git . FilePath Ċ import Ġsystems . danger . kotlin . sdk . D anger Context Ċ import Ġsystems . danger . kotlin . sdk . Violation Ċ import Ġjava . io . File Ċ import Ġjava . util . concurrent . atomic . Atomic Reference Ċ Ċ /** Ċ Ġ* ĠMain ĠD anger Ġrunner Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreates Ġthe Ġmain ĠD anger Context Ċ Ġ* Ċ Ġ* Ġ@ param Ġjson Input FilePath Ġthe Ġinput Ġjson Ġfile Ġpath Ġ( received Ġfrom Ġdanger - js ) Ċ Ġ* Ġ@ param Ġjson Output Path Ġthe Ġoutput Ġjson Ġfile Ġpath Ġused Ġto Ġpublish Ġthe Ġdanger Ġresults Ġon Ġyour ĠPull ĠRequest Ċ Ġ*/ Ċ internal Ġclass ĠMain D anger Runner ( json Input FilePath : ĠFilePath , Ġjson Output Path : ĠFilePath ) Ġ: ĠD anger Context Ġ{ ĊĠĠĠ Ġprivate Ġval Ġjson OutputFile : ĠFile Ġ= ĠFile ( json Output Path ) ĊĊĠĠĠ Ġval Ġdanger : ĠD anger DSL Ġ= ĠJson Parser . decode Json < DSL >( json Input FilePath ). danger ĊĊĠĠĠ Ġprivate Ġval Ġconcurrent D anger Results : ĠConcurrent D anger Results Ġ= ĠConcurrent D anger Results () ĊĊĠĠĠ Ġoverride Ġval Ġfails : ĠList < Violation > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconcurrent D anger Results . fails . get () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġval Ġwarnings : ĠList < Violation > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconcurrent D anger Results . warnings . get () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġval Ġmessages : ĠList < Violation > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconcurrent D anger Results . messages . get () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġval Ġmarkdown s : ĠList < Violation > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconcurrent D anger Results . markdown s . get () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ĠCollect Ġthe Ġregistered Ġplugins Ġand Ġinitialize Ġwith Ġthe ĠD anger Context ĊĠĠĠ Ġ// Ġthen Ġcreates Ġan Ġoutput Ġjson Ġfile ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġregister . danger Plugins . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . with Context ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcommit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfail ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfail ( Violation ( message )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfail ( message : ĠString , Ġfile : ĠFilePath , Ġline : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfail ( Violation ( message , Ġfile , Ġline )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwarn ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwarn ( Violation ( message )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwarn ( message : ĠString , Ġfile : ĠFilePath , Ġline : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwarn ( Violation ( message , Ġfile , Ġline )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmessage ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage ( Violation ( message )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmessage ( message : ĠString , Ġfile : ĠFilePath , Ġline : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage ( Violation ( message , Ġfile , Ġline )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmarkdown ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmarkdown ( Violation ( message )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmarkdown ( message : ĠString , Ġfile : ĠFilePath , Ġline : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmarkdown ( Violation ( message , Ġfile , Ġline )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsuggest ( code : ĠString , Ġfile : ĠFilePath , Ġline : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( runner Instance . danger . on GitHub ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" ``` suggestion \ n Ġ$ code Ġ\ n ``` " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarkdown ( Violation ( message , Ġfile , Ġline )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" ``` \ n Ġ$ code Ġ\ n ``` " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage ( Violation ( message )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwarn ( violation : ĠVi olation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconcurrent D anger Results . warnings . update With ( violation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfail ( violation : ĠVi olation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconcurrent D anger Results . fails . update With ( violation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmessage ( violation : ĠVi olation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconcurrent D anger Results . messages . update With ( violation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmarkdown ( violation : ĠVi olation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconcurrent D anger Results . markdown s . update With ( violation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAtomic Reference < Mutable List < Violation >> . update With ( violation : ĠVi olation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . get AndUpdate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( violation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcommit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġcommit Ġall Ġthe Ġinline Ġviolations Ġinto Ġthe Ġjson Ġoutput Ġfile ĊĠĠĠ Ġprivate Ġfun Ġcommit () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJson Parser . encode Json ( concurrent D anger Results . to D anger Results (), Ġjson OutputFile ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ