/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 5 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . jetbrains . kotlin . idea . refactor ing . move . move Files Or Directories Ċ Ċ import Ġcom . intellij . refactor ing . move . move Files Or Directories . Move File Handler Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . Psi Directory Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . usage View . Usage Info Ċ import Ġcom . intellij . openapi . roots . Java Project Roots Util Ċ import Ġcom . intellij . psi . Psi Compiled Element Ċ import Ġorg . jetbrains . kotlin . psi . Jet File Ċ import Ġorg . jetbrains . kotlin . psi . Jet Named Declaration Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . idea . references . Jet Simple Name Reference Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Package Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . move . PackageName Info Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . move . get Internal References ToUpdate On PackageName Change Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . move . post Process Move Usage s Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . move . move TopLevel Declarations . Move Kotlin TopLevel Declarations Processor Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . move . move TopLevel Declarations . Move Kotlin TopLevel Declarations Options Ċ import Ġcom . intellij . refactor ing . move . move Files Or Directories . Move Files Or Directories Util Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . move . move TopLevel Declarations . Deferred Jet File Kotlin Move Target Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . move . move TopLevel Declarations . M over Ċ import Ġorg . jetbrains . kotlin . idea . code Insight . short en . ensure Elements To Short en IsEmpty Before Ref actor ing Ċ Ċ public Ġclass ĠMove Kotlin File Handler Ġ: ĠMove File Handler () Ġ{ ĊĠĠĠ Ġprivate Ġvar ĠpackageName Info : ĠPackage Name Info ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdeclaration Move Processor : ĠMove Kotlin TopLevel Declarations Processor ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġclear State () Ġ{ ĊĠĠĠĠĠĠĠ ĠpackageName Info Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġdeclaration Move Processor Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠJet File . package Matches Directory (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Package Fq Name (). asString () Ġ== ĠgetParent ()?. get Package ()?. get QualifiedName () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcan Process Element ( element : ĠPsi File ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( element Ġis ĠPsi Compiled Element Ġ|| Ġelement Ġ! is ĠJet File ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġ! Java Project Roots Util . is Outside Java Source Root ( element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind Usage s ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpsi File : ĠPsi File , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Parent : ĠPsi Directory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch In Comments : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch In Non Java Files : ĠBoolean ĊĠĠĠ Ġ): ĠList < Usage Info >? Ġ{ ĊĠĠĠĠĠĠĠ Ġclear State () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( psi File Ġ! is ĠJet File Ġ|| Ġ! psi File . package Matches Directory ()) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Package Ġ= Ġnew Parent . get Package () ĊĠĠĠĠĠĠĠ Ġif Ġ( new Package Ġ== Ġnull ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval ĠpackageName Info Ġ= ĠPackage Name Info ( psi File . get Package Fq Name (), ĠF q Name ( new Package . get QualifiedName ())) ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġpsi File . getProject () ĊĊĠĠĠĠĠĠĠ Ġval Ġdeclaration Move Processor Ġ= ĠMove Kotlin TopLevel Declarations Processor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMove Kotlin TopLevel Declarations Options ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelements To Move Ġ= Ġpsi File . get Declarations (). filter Is Instance < Jet Named Declaration >(), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Target Ġ= ĠDeferred Jet File Kotlin Move Target ( project , ĠpackageName Info . new PackageName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMove Files Or Directories Util . do Move File ( psi File , Ġnew Parent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Parent . find File ( psi File . getName ()) Ġas ? ĠJet File ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Internal References Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject : ĠM over Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[ suppress (" PARAMETER _ NAME _ CHANGED _ ON _ OVERRIDE ")] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( original Element : ĠJet Named Declaration , Ġtarget File : ĠJet File ): ĠJet Named Declaration Ġ= Ġoriginal Element ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġthis . packageName Info Ġ= ĠpackageName Info ĊĠĠĠĠĠĠĠ Ġthis . declaration Move Processor Ġ= Ġdeclaration Move Processor ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdeclaration Move Processor . find Usage s (). toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprepare Moved File ( file : ĠPsi File , Ġmove Destination : ĠPsi Directory , Ġold To New Map : ĠMap < Psi Element , ĠPsi Element >) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Moved File ( file : ĠPsi File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( file Ġ! is ĠJet File ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval ĠpackageName Info Ġ= ĠpackageName Info ĊĠĠĠĠĠĠĠ Ġif Ġ( packageName Info Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġusage s Ġ= Ġfile . get Internal References ToUpdate On PackageName Change ( packageName Info ) ĊĠĠĠĠĠĠĠ Ġpost Process Move Usage s ( us ages ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpackage Ref Ġ= Ġfile . get Package Directive ()?. getLast Reference Expression ()?. getReference () Ġas ? ĠJet Simple Name Reference ĊĠĠĠĠĠĠĠ Ġpackage Ref ?. bind To Fq Name ( packageName Info . new PackageName ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġre target Usage s ( usage Infos : ĠList < Usage Info > ?, Ġold To New Map : ĠMap < Psi Element , ĠPsi Element > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= Ġdeclaration Move Processor Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġprocessor . project ĊĠĠĠĠĠĠĠ Ġval Ġensure Elements To Short en IsEmpty Ġ= Ġproject . ensure Elements To Short en IsEmpty Before Ref actor ing ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . ensure Elements To Short en IsEmpty Before Ref actor ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusage Infos ?. let Ġ{ Ġprocessor . execute ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . ensure Elements To Short en IsEmpty Before Ref actor ing Ġ= Ġensure Elements To Short en IsEmpty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear State () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ