/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . android . tools . idea . gradle . project . sync . issues . processor Ċ Ċ import Ġcom . android . tools . idea . gradle . dsl . api . Project Build Model Ċ import Ġcom . android . tools . idea . gradle . dsl . model . Gradle Dsl Block Model Ċ import Ġcom . android . tools . idea . gradle . project . sync . Gradle Sync Invoker Ċ import Ġcom . google . wire less . android . sdk . stats . Gradle Sync Stats . Trigger . TRIGGER _ Q F _ N DK _ INST ALLED Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . refactor ing . Base Ref actor ing Processor Ċ import Ġcom . intellij . usage View . Usage Info Ċ import Ġcom . intellij . usage View . Usage View Bundle Ċ import Ġcom . intellij . usage View . Usage View Descriptor Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠTool Ġto Ġrewrite Ġbuild . gradle Ġfile Ġto Ġadd Ġor Ġupdate Ġandroid . nd k Version Ġsection . Ċ Ġ*/ Ċ class ĠFix N dk Version Processor ( ĊĠ Ġproject : ĠProject , ĊĠ Ġprivate Ġval Ġbuild Files : ĠList < Virtual File >, ĊĠ Ġprivate Ġval Ġversion : ĠString ) Ġ: ĠBase Ref actor ing Processor ( project ) Ġ{ ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠPro duce Ġusage Ġdisplay Ġinformation . ĊĠĠ Ġ*/ ĊĠ Ġpublic Ġoverride Ġfun Ġcreate Usage View Descriptor ( us ages : ĠArray < Usage Info >): ĠUsage View Descriptor Ġ{ ĊĠĠĠ Ġreturn Ġobject Ġ: ĠUsage View Descriptor Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġget Code References Text ( us ages Count : ĠInt , Ġfiles Count : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Values Ġto Ġupdate Ġ" Ġ+ ĠUsage View Bundle . get References String ( us ages Count , Ġfiles Count ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġget Elements (): ĠArray < Psi Element > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPsi Element . EMPTY _ ARRAY ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġget Processed Elements Header (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Update ĠAndroid ĠN DK ĠVersions " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠFind Ġthe Ġpoints Ġin Ġbuild . gradle Ġwhere Ġn dk Version Ġcan Ġbe Ġupdated . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠThere Ġare Ġtwo Ġcases : ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ( 1 ) ĠThere Ġis Ġno Ġpre - existing Ġandroid . nd k Version . ĠIn Ġthis Ġcase Ġthe ĠP SI Ġelement Ġfor ĊĠĠ Ġ* ĠĠĠĠ Ġthe Ġ' android ' Ġblock Ġis Ġreturned . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ( 2 ) ĠThere Ġis Ġa Ġpre - existing Ġandroid . nd k Version . ĠIn Ġthis Ġcase Ġthe ĠP SI Ġelement Ġfor ĊĠĠ Ġ* ĠĠĠĠ Ġthe Ġ' nd k Version ' Ġis Ġreturned . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠUs ages Ġare Ġonly Ġreturned Ġwhen Ġthere Ġis Ġa Ġvalid Ġexternal Native Build Ġblock Ġin Ġthe ĊĠĠ Ġ* Ġbuild . gradle Ġfile . ĊĠĠ Ġ*/ ĊĠ Ġpublic Ġoverride Ġfun Ġfind Usage s (): ĠArray < Usage Info > Ġ{ ĊĠĠĠ Ġval Ġproject Build Model Ġ= ĠProject Build Model . get ( my Project ) ĊĊĠĠĠ Ġval Ġusage s Ġ= ĠArrayList < Usage Info >() ĊĠĠĠ Ġfor Ġ( file Ġin Ġbuild Files ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ(! file . isValid Ġ|| Ġ! file . is Writable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġandroid Ġ= Ġproject Build Model . getModule Build Model ( file ). android () ĊĊĠĠĠĠĠ Ġval Ġexternal Native Build Ġ= Ġandroid . external Native Build () Ġas ĠGradle Dsl Block Model ĊĠĠĠĠĠ Ġif Ġ(! external Native Build . has Valid Psi Element ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġn dk Version Ġ= Ġandroid . nd k Version () ĊĠĠĠĠĠ Ġif Ġ( version Ġ== Ġn dk Version . toString ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġelement Ġ= Ġn dk Version . full Expression Psi Element ĊĠĠĠĠĠ Ġif Ġ( element Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġusage s . add ( Usage Info ( element )) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġusage s . add ( Usage Info (( android Ġas ĠGradle Dsl Block Model ). psi Element !! )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġusage s . to Typed Array () ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠPerforms Ġthe Ġactual Ġrefactoring Ġon Ġeach Ġbuild . gradle Ġfile . ĊĠĠ Ġ* ĠOnce Ġall Ġbuild . gradle Ġfiles Ġhave Ġbeen Ġmodified , Ġthe Ġproject Ġis Ġsynced . ĊĠĠ Ġ*/ ĊĠ Ġpublic Ġoverride Ġfun Ġperform Ref actor ing ( us ages : ĠArray < Usage Info >) Ġ{ ĊĠĠĠ Ġval Ġproject Build Model Ġ= ĠProject Build Model . get ( my Project ) ĊĊĠĠĠ Ġfor Ġ( file Ġin Ġbuild Files ) Ġ{ ĊĠĠĠĠĠ Ġval Ġandroid Ġ= Ġproject Build Model . getModule Build Model ( file ). android () ĊĠĠĠĠĠ Ġval Ġexternal Native Build Ġ= Ġandroid . external Native Build () Ġas ĠGradle Dsl Block Model ĊĠĠĠĠĠ Ġif Ġ(! external Native Build . has Valid Psi Element ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġn dk Version Ġ= Ġandroid . nd k Version () ĊĠĠĠĠĠ Ġn dk Version . setValue ( version ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġproject Build Model . apply Changes () ĊĊĠĠĠ ĠGradle Sync Invoker . getInstance (). request Project Sync ( my Project , ĠTR IG GER _ Q F _ N DK _ INST ALLED ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠDescription Ġof Ġthis Ġrefactoring . ĊĠĠ Ġ*/ ĊĠ Ġpublic Ġoverride Ġfun Ġget CommandName (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġ" Update ĠAndroid ĠN DK ĠVersion " ĊĠ Ġ} Ċ }