package Ġnet . zero 9 1 7 8 . cov . data Ċ Ċ import Ġcom . intellij . execution . configurations . General CommandLine Ċ import Ġcom . intellij . openapi . progress . Progress Indicator Ċ import Ġcom . intellij . util . io . exists Ċ import Ġcom . jetbrains . cidr . cpp . execution . CMake App Run Configuration Ċ import Ġcom . jetbrains . cidr . cpp . execution . CMake Build Profile Execution Target Ċ import Ġcom . jetbrains . cidr . cpp . tool chains . CPP Environment Ċ import Ġcom . jetbrains . cidr . cpp . tool chains . W SL Ċ import Ġcom . jetbrains . cidr . execution . Configuration Extension Context Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ interface ĠCoverage Generator Ġ{ ĊĠĠĠ Ġfun Ġpatch Environment ( ĊĠĠĠĠĠĠĠ Ġconfiguration : ĠCMake App Run Configuration , ĊĠĠĠĠĠĠĠ Ġenvironment : ĠCPP Environment , ĊĠĠĠĠĠĠĠ Ġexecution Target : ĠCMake Build Profile Execution Target , ĊĠĠĠĠĠĠĠ Ġcmd Line : ĠGeneral CommandLine , ĊĠĠĠĠĠĠĠ Ġcontext : ĠConfiguration Extension Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Coverage ( ĊĠĠĠĠĠĠĠ Ġconfiguration : ĠCMake App Run Configuration , ĊĠĠĠĠĠĠĠ Ġenvironment : ĠCPP Environment , ĊĠĠĠĠĠĠĠ Ġexecution Target : ĠCMake Build Profile Execution Target , ĊĠĠĠĠĠĠĠ Ġindicator : ĠProgress Indicator , ĊĠĠĠĠĠĠĠ Ġcontext : ĠConfiguration Extension Context ĊĠĠĠ Ġ): ĠCoverage Data ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġextract Version ( line : ĠString ): ĠTrip le < Int , ĠInt , ĠInt > Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġ"( \\ d +) \\ .( \\ d +) \\ .( \\ d +) ". to Regex (). findAll ( line ). last OrNull () Ġ?: Ġreturn ĠTrip le ( 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠ Ġval Ġ( first , Ġsecond , Ġvalue ) Ġ= Ġresult . de structured ĊĠĠĠ Ġreturn ĠTrip le ( first . toInt (), Ġsecond . toInt (), Ġvalue . toInt ()) Ċ } Ċ Ċ fun Ġcreate Generator For ( ĊĠĠĠ Ġexecutable : ĠString , ĊĠĠĠ Ġmaybe Optional LLVM Prof : ĠString ?, ĊĠĠĠ Ġoptional Dem ang ler : ĠString ?, ĊĠĠĠ Ġw sl : ĠW SL ? Ċ ): ĠPair < Coverage Generator ?, ĠString ?> Ġ{ ĊĠĠĠ Ġif Ġ( executable . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull Ġto Ġ" No Ġexecutable Ġspecified " ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( if Ġ( w sl Ġ== Ġnull ) Ġ! Paths . get ( executable ). exists () Ġelse Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull Ġto Ġ" Executable Ġdoes Ġnot Ġexist " ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġp Ġ= ĠProcess Builder ( ĊĠĠĠĠĠĠĠ Ġ( if Ġ( w sl Ġ!= Ġnull ) ĠlistOf ( w sl . home Path , Ġ" run ") Ġelse Ġempty List ()) Ġ+ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutable , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- version " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). start () ĊĠĠĠ Ġval Ġlines Ġ= Ġp . inputStream . buffered Reader (). read Lines () ĊĠĠĠ Ġif Ġ(! p . waitFor ( 5 , ĠTimeUnit . SECONDS )) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull Ġto Ġ" Executable Ġtimed Ġout " ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġret Code Ġ= Ġp . exit Value () ĊĠĠĠ Ġif Ġ( ret Code Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstderr Output Ġ= Ġp . error Stream . buffered Reader (). read Lines () ĊĠĠĠĠĠĠĠ Ġreturn Ġnull Ġto Ġ" Executable Ġreturned Ġwith Ġerror Ġcode Ġ$ ret Code Ġand Ġerror Ġoutput :\ n Ġ${ stderr Output . join ToString ("\ n ") }" ĊĠĠĠ Ġ} ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġlines [ 0 ]. contains (" LLVM ", Ġtrue ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( maybe Optional LLVM Prof Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull Ġto Ġ" No Ġllvm - prof data Ġspecified Ġto Ġaccompany Ġllvm - cov " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmajor Version Ġ= Ġextract Version ( lines [ 1 ]). first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLLVM Coverage Generator ( major Version , Ġexecutable , Ġmaybe Optional LLVM Prof , Ġoptional Dem ang ler ) Ġto Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlines [ 0 ]. contains (" g cov ", Ġtrue ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġextract Version ( lines [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( version . first Ġ>= Ġ 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGCC JSON Coverage Generator ( executable , Ġversion . first ) Ġto Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGCC G CD AC over age Generator ( executable , Ġversion . first ) Ġto Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull Ġto Ġ" Executable Ġidentified Ġas Ġneither Ġg cov Ġnor Ġllvm - cov " ĊĠĠĠ Ġ} Ċ }