package Ġcom . cred ow olf . de pe Ċ Ċ import Ġcom . android . tools . idea . gradle . parser .* Ċ import Ġcom . android . tools . idea . gradle . util . Gradle Util Ċ import Ġcom . cred ow olf . de pe . utils .* Ċ import Ġcom . intellij . openapi . file Editor . File Document Manager Ċ import Ġcom . intellij . openapi . module . Module Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . util . Incorrect OperationException Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . api . statements . Gr Statement Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . api . util . Gr Statement Owner Ċ Ċ class ĠVersions Exporter ( private Ġval Ġproject : ĠProject ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġversions File Ġget () Ġ= Ġproject . guess Versions File () ĊĊĠĠĠ Ġprivate Ġfun Ġexclude Versions From Modules ( selected Modules : ĠList < Module >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġversions Map Ġ= Ġmutable Map Of < String , ĠUn parse able Statement >() ĊĠĠĠĠĠĠĠ Ġselected Modules . map Ġ{ ĠGradle Build File . get ( it ) !! Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġbuild File Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// re writes Ġdependencies Ġfrom Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( deps Versions , Ġdependencies ) Ġ= Ġread Dep Versions From Module ( build File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversions Map . put All ( deps Versions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deps Versions . isNotEmpty ()) Ġwrite ( project ) Ġ{ Ġbuild File . setValue ( Build File Key . DEPEND ENCI ES , Ġdependencies ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// re writes Ġvariables Ġfrom Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( vars Versions , Ġdefinitions ) Ġ= Ġread Vars From Module ( build File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversions Map . put All ( vars Versions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( project ) Ġ{ Ġbuild File . remove Definitions ( definitions ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! versions Map . values . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( project ) Ġ{ ĠVersions Gradle File ( versions File , Ġproject ). add Versions ( versions Map . values . map Ġ{ Ġit Ġ}) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Dep Versions From Module ( build File : ĠGradle Build File ): ĠPair < Mutable Map < String , ĠUn parse able Statement >, ĠList < Build File Statement >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodule Versions Map Ġ= Ġmutable Map Of < String , ĠUn parse able Statement >() ĊĠĠĠĠĠĠĠ Ġval Ġdependencies Ġ= Ġbuild File . dependencies List . map Ġ{ Ġdependency Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dependency Ġis ĠDependency ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dependency . type Ġ== ĠDependency . Type . EXTERNAL Ġ&& Ġ! dependency . version . startsWith ("\ $ ")) Ġ{ Ġ// replace Ġthis Ġdependency Ġversion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Versions Map [ dependency . group ] Ġ= ĠUn parse able Statement ( dependency . to Ext , Ġproject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDependency ( dependency . scope , Ġdependency . type , Ġdependency . to Dependencies , Ġdependency . extra Closure ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependency ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependency ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( module Versions Map , Ġdependencies ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Vars From Module ( build File : ĠGradle Build File ): ĠPair < Mutable Map < String , ĠUn parse able Statement >, ĠArray < Gr Statement >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodule Vars Map Ġ= Ġmutable Map Of < String , ĠUn parse able Statement >() ĊĠĠĠĠĠĠĠ Ġval Ġdefinitions Ġ= Ġbuild File . find Definitions () ĊĠĠĠĠĠĠĠ Ġdefinitions . forEach Ġ{ Ġmodule Vars Map [ it . group ] Ġ= ĠUn parse able Statement ( it . text . remove Prefix (" def "). remove Prefix (" final "). trim (), Ġproject ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( module Vars Map , Ġdefinitions . to Typed Array ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Versions File ( versions File : ĠVirtual File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbase Module Ġ= Ġproject . module Manager . modules [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġgradle Ġ= ĠGradle Util . get Gradle Build File ( base Module ) ĊĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= ĠFile Document Manager . getInstance (). getDocument ( gradle !! ) !! ĊĠĠĠĠĠĠĠ Ġval Ġapply Text Ġ= Ġ" apply Ġfrom : Ġ'" Ġ+ Ġversions File . name Ġ+ Ġ"' \ n " ĊĊĠĠĠĠĠĠĠ Ġ// VE EE ERY ĠBAD ĠSOL UTION Ġbut Ġworks ĊĠĠĠĠĠĠĠ Ġwrite ( project ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! doc . text . contains ( apply Text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc . setText ( apply Text Ġ+ Ġdoc . text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Actions With Modules ( modules : ĠList < Module >, Ġsync : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodified Ġ= Ġexclude Versions From Modules ( modules ) ĊĠĠĠĠĠĠĠ Ġif Ġ( modified ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply Versions File ( versions File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync . invoke () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġproject . show Notification (" No Ġdependencies Ġto Ġexport Ġversions ") ĊĠĠĠ Ġ} Ċ } ĊĊĊĊ