package Ġg cov . state Ċ Ċ import Ġcom . intellij . openapi . components .* Ċ import Ġcom . intellij . util . xml b . Xml Serializer Util Ċ import Ġcom . jetbrains . cidr . cpp . tool chains . CPP Tool Set Ċ import Ġcom . jetbrains . cidr . cpp . tool chains . CPP Tool chains Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Reader Ċ Ċ @ State ( name Ġ= Ġ" GC over age Path ", Ġstorage s Ġ= Ġ[ Storage (" g cov . xml ", Ġro aming Type Ġ= ĠRo aming Type . DISABLED )]) Ċ class ĠGC ov Settings Ġ: ĠPersistent State Component < GC ov Settings > Ġ{ ĊĊĠĠĠ Ġ@ com . intellij . util . xml b . annotations . Property ĊĠĠĠ Ġprivate Ġval Ġmy G co vs Ġ= Ġmutable Map Of < String , ĠGC ov >() ĊĊĠĠĠ Ġclass ĠGC ov Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġtoolchain Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Version () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġg cov Path Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Version () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ com . intellij . util . xml b . annotations . Transient ĊĠĠĠĠĠĠĠ Ġvar Ġversion : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠĠĠĠĠ Ġ@ com . intellij . util . xml b . annotations . Transient ĊĠĠĠĠĠĠĠ Ġvar Ġvalid : ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠĠĠĠĠ Ġ@ com . intellij . util . xml b . annotations . Transient ĊĠĠĠĠĠĠĠ Ġvar Ġerror String : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġset Version () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror String Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtool Chain Ġ= ĠCPP Tool chains . getInstance (). get Tool chain ByName OrDefault ( toolchain ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tool Chain Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror String Ġ= Ġ" Could Ġnot Ġdetermine Ġassociated Ġtoolchain " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkind Ġ= Ġtool Chain . tool Set Kind ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( kind Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror String Ġ= Ġ" Could Ġnot Ġdetermine Ġkind Ġof Ġtoolchain " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( kind Ġ!= ĠCPP Tool Set . Kind . W SL Ġ&& Ġ! File ( g cov Path ). exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlines Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġif Ġ( kind Ġ== ĠCPP Tool Set . Kind . W SL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProcess Builder ( tool Chain . tool Set Path , Ġ" run ", Ġg cov Path , Ġ"-- version "). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġredirect Error Stream ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProcess Builder ( g cov Path , Ġ"-- version "). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġredirect Error Stream ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġbuilder . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠBufferedReader ( InputStream Reader ( p . inputStream )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġreader . readLine () Ġ?: Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Code Ġ= Ġp . waitFor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Code Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror String Ġ= Ġ" g cov Ġreturned Ġwith Ġerror Ġcode Ġ$ ret Code " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lines . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror String Ġ= Ġ" Could Ġnot Ġdetermine Ġversion Ġof Ġg cov " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġversion Line Ġ= Ġlines . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Line Ġ= Ġversion Line . replace (""" \( .* \) """. to Regex (), Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġ""" (\ d \. ? ){ 1 , 3 } """. to Regex (). findAll ( version Line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġmatch . first (). value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġvalue . split ('. '). first (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( System . getProperty (" os . name "). startsWith (" Mac ") Ġ&& Ġlines . first (). contains (" LLVM ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġ 7 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget GC ov Path For Tool chain ( toolchain : ĠString ): ĠGC ov ? Ġ= Ġmy G co vs [ toolchain ] ĊĊĠĠĠ Ġfun Ġget GC ov Path For Tool chain ( toolchain : ĠCPP Tool chains . Tool chain ): ĠGC ov ? Ġ= Ġget GC ov Path For Tool chain ( toolchain . name ) ĊĊĠĠĠ Ġfun Ġput GC ov Path For Tool chain ( toolchain : ĠString , Ġpath : ĠString ): ĠGC ov Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġg cov Ġ= Ġmy G co vs . get Or Put ( toolchain ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGC ov (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . toolchain Ġ= Ġtoolchain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġg cov . g cov Path Ġ= Ġpath ĊĠĠĠĠĠĠĠ Ġreturn Ġg cov ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġput GC ov Path For Tool chain ( toolchain : ĠCPP Tool chains . Tool chain , Ġpath : ĠString ): ĠGC ov Ġ= Ġput GC ov Path For Tool chain ( toolchain . name , Ġpath ) ĊĊĠĠĠ Ġfun Ġremove GC ov Path For Tool chain ( toolchain : ĠString ) Ġ= Ġmy G co vs . remove ( toolchain ) ĊĊĠĠĠ Ġfun Ġremove GC ov Path For Tool chain ( toolchain : ĠCPP Tool chains . Tool chain ) Ġ= Ġremove GC ov Path For Tool chain ( toolchain . name ) ĊĊĠĠĠ Ġoverride Ġfun ĠgetState (): ĠGC ov Settings Ġ= Ġthis ĊĊĠĠĠ Ġoverride Ġfun Ġload State ( settings : ĠGC ov Settings ) Ġ{ ĊĠĠĠĠĠĠĠ ĠXml Serializer Util . copy Bean ( settings , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance (): ĠGC ov Settings Ġ= ĠService Manager . getService ( GC ov Settings :: class . java ) !! ĊĊĠĠĠ Ġ} Ċ Ċ }