package Ġorg . jetbrains . research . l up a . kotlin Analysis . gradle . analysis . gradle . build Gradle . de pen encies Ċ Ċ import Ġorg . jetbrains . research . l up a . kotlin Analysis . util . Kotlin Constants Ċ Ċ /** Ċ Ġ* ĠUtil Ġclass Ġfor Ġworking Ġwith ĠGradle Ġdependencies Ġsection , Ġfor Ġexample Ġparsing Ġdependencies Ġfrom Ġbuild Ġfiles . Ċ Ġ*/ Ċ class ĠBuild Gradle Dependency File Util Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNAME Ġ= Ġ"[ ^ :{} \' \"] *" ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠQU OT ES Ġ= Ġ"[ \' \"] " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSE PAR ATORS Ġ= Ġ"[ \' \": , ] +" ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRegex Ġto Ġparse ĠGradle Ġdependency : ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġbuild . gradle : ĊĠĠĠĠĠĠĠĠ Ġ* Ġimplementation Ġ" com . google . code . gson : gson : 2 . 8 . 7 " Ġ-- Ġstandard ĊĠĠĠĠĠĠĠĠ Ġ* Ġimplementation Ġ' com . google . code . gson : gson : 2 . 8 . 7 ' Ġ-- Ġsingle Ġquotes ĊĠĠĠĠĠĠĠĠ Ġ* Ġimplementation Ġ" com . google . code . gson : gson " Ġ-- Ġwithout Ġversion ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġbuild . gradle . k ts : ĊĠĠĠĠĠĠĠĠ Ġ* Ġimplementation (" com . google . code . gson : gson : 2 . 8 . 7 ") Ġ-- Ġstandard ĊĠĠĠĠĠĠĠĠ Ġ* Ġimplementation (" com . google . code . gson "," gson "," 2 . 8 . 7 ") Ġ-- Ġwith Ġcomma Ġseparation ĊĠĠĠĠĠĠĠĠ Ġ* Ġ... Ġsame Ġas Ġfor Ġbuild . gradle Ġbut Ġin Ġbuild . gradle . k ts Ġnotation Ġwith Ġbrackets Ġ... ĊĠĠĠĠĠĠĠĠ Ġ**/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠGR AD LE _ DEPEND ENCI ES _ SHORT _ REGEX Ġ= Ġ" (${ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Gradle Dependency Configuration . available Keys (). join ToString ( separator Ġ= Ġ"| ") ĊĠĠĠĠĠĠĠ Ġ}) [( ] ?$ QUOT ES ($ NAME )$ SEPAR ATORS ($ NAME ) ($ SEPAR ATORS $ NAME )? $ QUOT ES [ )] ?" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Regex ( Regex Option . IGNORE _ CASE ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRegex Ġto Ġparse ĠGradle Ġdependency : ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġbuild . gradle : ĊĠĠĠĠĠĠĠĠ Ġ* Ġimplementation Ġgroup =" com . google . code . gson ", name =" gson ", version =" 2 . 8 . 7 " Ġ-- Ġstandard ĊĠĠĠĠĠĠĠĠ Ġ* Ġimplementation Ġgroup =' com . google . code . gson ', name =' gson ', version =' 2 . 8 . 7 ' Ġ-- Ġsingle Ġquotes ĊĠĠĠĠĠĠĠĠ Ġ* Ġimplementation Ġgroup =' com . google . code . gson ', name =' gson ' Ġ-- Ġwithout Ġversion ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġbuild . gradle . k ts : ĊĠĠĠĠĠĠĠĠ Ġ* Ġimplementation ( group =" com . google . code . gson ", name =" gson ", version =" 2 . 8 . 7 ") Ġ-- Ġstandard ĊĠĠĠĠĠĠĠĠ Ġ* Ġ... Ġsame Ġas Ġfor Ġbuild . gradle Ġbut Ġin Ġbuild . gradle . k ts Ġnotation Ġwith Ġbrackets Ġ... ĊĠĠĠĠĠĠĠĠ Ġ**/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠGR AD LE _ DEPEND ENCI ES _ FULL _ REGEX Ġ= Ġ" (${ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Gradle Dependency Configuration . available Keys (). join ToString ( separator Ġ= Ġ"| ") ĊĠĠĠĠĠĠĠ Ġ}) [( ]? group =$ QUOT ES ($ NAME )$ QUOT ES , name =$ QUOT ES ($ NAME )$ QUOT ES ( , version =$ QUOT ES $ NAME $ QUOT ES )? [ )] ?" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Regex ( Regex Option . IGNORE _ CASE ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRegex Ġto Ġparse ĠKotlin Ġspecific ĠGradle Ġdependency , Ġwhich Ġis Ġuse Ġshort Ġversion Ġfor ĊĠĠĠĠĠĠĠĠ Ġ* Ġ' org . jetbrains . kotlin ' Ġlibraries : ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġbuild . gradle . k ts : ĊĠĠĠĠĠĠĠĠ Ġ* Ġclasspath ( kotlin (" gradle - plugin ", Ġ" 1 . 5 . 2 0 ")) Ġ~ Ġclasspath (" org . jetbrains . kotlin : kotlin - gradle - plugin : 1 . 5 . 2 0 ")) ĊĠĠĠĠĠĠĠĠ Ġ**/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠGR AD LE _ DEPEND ENCI ES _ K OT LIN _ REGEX Ġ= Ġ" (${ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Gradle Dependency Configuration . available Keys (). join ToString ( separator Ġ= Ġ"| ") ĊĠĠĠĠĠĠĠ Ġ}) [( ]? kotlin [( ] ?$ QUOT ES ($ NAME )$ QUOT ES .* [ )] ?[ )] ?" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Regex ( Regex Option . IGNORE _ CASE ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġparse Gradle Dependency Params ( gradle Dependency Line : ĠString ): ĠTrip le < String , ĠString , ĠString >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgradle Dependency Line . replace ("\\ s ". to Regex (), Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġdependency Line Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( GRAD LE _ DEPEND ENCI ES _ SHORT _ REGEX . match Ent ire ( dependency Line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠGR AD LE _ DEPEND ENCI ES _ FULL _ REGEX . match Ent ire ( dependency Line )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . groups ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . size Ġ< Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfig Key Ġ= Ġit [ 1 ]?. value Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠgroupId Ġ= Ġit [ 2 ]?. value Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġartifact Id Ġ= Ġit [ 3 ]?. value Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( config Key , ĠgroupId , Ġartifact Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ( GRAD LE _ DEPEND ENCI ES _ K OT LIN _ REGEX . match Ent ire ( dependency Line )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . groups ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . size Ġ< Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfig Key Ġ= Ġit [ 1 ]?. value Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠgroupId Ġ= ĠKotlin Constants . O GR _ J ET BR AIN S _ K OT LIN . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġartifact Id Ġ= Ġit [ 2 ]?. value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġkotlin Artifact Id Ġ-> Ġ"${ Kotlin Constants . K OT LIN . value }- $ kotlin Artifact Id " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( config Key , ĠgroupId , Ġartifact Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ