/* Ċ Ġ* Ġ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 TopLevel Declarations Ċ Ċ import Ġcom . intellij . refactor ing . Base Ref actor ing Processor Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . usage View . Usage Info Ċ import Ġcom . intellij . usage View . Usage View Descriptor Ċ import Ġcom . intellij . refactor ing . move . Move Callback Ċ import Ġcom . intellij . refactor ing . move . Move Multiple Elements View Descriptor Ċ import Ġcom . intellij . refactor ing . move . move Classes Or Packages . Move Classes Or Packages Util Ċ import Ġcom . intellij . usage View . Usage View Util Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . refactor ing . util . Non Code Usage Info Ċ import Ġcom . intellij . util . Incorrect OperationException Ċ import Ġcom . intellij . refactor ing . util . Ref actor ing UI Util Ċ import Ġorg . jetbrains . kotlin . utils . keys ToMap Ċ import Ġcom . intellij . refactor ing . rename . Rename Util Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . Jet Ref actor ing Bundle Ċ import Ġcom . intellij . openapi . util . text . StringUtil Ċ import Ġcom . intellij . psi . Psi Directory Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Package Ċ import Ġorg . jetbrains . kotlin . psi . Jet File Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . move . PackageName Info Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . create Kotlin File Ċ import Ġorg . jetbrains . kotlin . idea . code Insight . short en . addTo Short ening Wait Set Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . move . get FileName After Move Ċ import Ġorg . jetbrains . kotlin . psi . Jet Named Declaration Ċ import Ġorg . jetbrains . kotlin . as Java . to Light Elements Ċ import Ġjava . util . HashMap Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . HashSet Ċ import Ġcom . intellij . psi . Psi Reference Ċ import Ġcom . intellij . psi . search . sear ches . References Search Ċ import Ġcom . intellij . refactor ing . util . Move Rename Usage Info Ċ import Ġcom . intellij . refactor ing . util . Text Occ urrences Util Ċ import Ġcom . intellij . refactor ing . move . move Classes Or Packages . Move Class Handler Ċ import Ġcom . intellij . util . containers . Multi Map Ċ import Ġorg . jetbrains . kotlin . as Java . named Un wrapped Element Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . is Private Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . get Usage Context Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . is Inside Of Ċ import Ġorg . jetbrains . kotlin . idea . code Insight . Jet File References Resolver Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . idea . code Insight . Descriptor To Source Utils Ide Ċ import Ġorg . jetbrains . kotlin . psi . Jet Modifier List Owner Ċ import Ġcom . intellij . psi . Psi Modifier List Owner Ċ import Ġcom . intellij . psi . Psi Modifier Ċ import Ġcom . intellij . util . Visibility Util Ċ import Ġcom . intellij . openapi . util . Ref Ċ import Ġorg . jetbrains . kotlin . idea . search . project Scope Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . move . get Internal References ToUpdate On PackageName Change Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . move . create Move Usage Info If Possible Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . move . post Process Move Usage s Ċ import Ġorg . jetbrains . kotlin . idea . references . Jet Simple Name Reference . Short ening Mode Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . is Ancestor Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . move . Move Rename Usage Info For Extension Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . fq Name . get Kotlin Fq Name Ċ Ċ trait ĠM over : Ġ( original Element : ĠJet Named Declaration , Ġtarget File : ĠJet File ) Ġ-> ĠJet Named Declaration Ġ{ ĊĠĠĠ Ġobject ĠDefault : ĠM over Ġ{ ĊĠĠĠĠĠĠĠ Ġ[ suppress (" PARAMETER _ NAME _ CHANGED _ ON _ OVERRIDE ")] ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( original Element : ĠJet Named Declaration , Ġtarget File : ĠJet File ): ĠJet Named Declaration Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Element Ġ= Ġtarget File . add ( original Element ) Ġas ĠJet Named Declaration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Element . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew Element ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ public Ġclass ĠMove Kotlin TopLevel Declarations Options ( ĊĠĠĠĠĠĠĠ Ġval Ġelements To Move : ĠCollection < Jet Named Declaration >, ĊĠĠĠĠĠĠĠ Ġval Ġmove Target : ĠKotlin Move Target , ĊĠĠĠĠĠĠĠ Ġval Ġsearch In Comments And Strings : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġval Ġsearch In Non Code : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġval Ġupdate Internal References : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġval Ġmove Callback : ĠMove Callback ? Ġ= Ġnull Ċ ) Ċ Ċ public Ġclass ĠMove Kotlin TopLevel Declarations Processor ( ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġval Ġoptions : ĠMove Kotlin TopLevel Declarations Options , ĊĠĠĠĠĠĠĠ Ġval Ġm over : ĠM over Ġ= ĠM over . Default ) Ġ: ĠBase Ref actor ing Processor ( project ) Ġ{ ĊĠĠĠ Ġclass Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOG : ĠLogger Ġ= ĠLogger . getInstance ( java Class < Move Kotlin TopLevel Declarations Processor >()) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠRE FACTOR ING _ NAME : ĠString Ġ= ĠJet Ref actor ing Bundle . message (" refactor ing . move . top . level . declarations ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġnon Code Usage s : ĠArray < Non Code Usage Info >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġelements To Move Ġ= Ġoptions . elements To Move . filter Ġ{ Ġe Ġ-> Ġe . get Containing File () Ġ!= Ġoptions . move Target . getTarget Psi IfExists ( e ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġkotlin To Light Elements Ġ= Ġelements To Move . keys ToMap Ġ{ Ġit . to Light Elements () Ġ} ĊĠĠĠ Ġprivate Ġval Ġconflicts Ġ= ĠMulti Map < Psi Element , ĠString >() ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Usage View Descriptor ( us ages : ĠArray < out ĠUsage Info >? ): ĠUsage View Descriptor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMove Multiple Elements View Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelements To Move . copy ToArray (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMove Classes Or Packages Util . get PackageName ( options . move Target . package Wrapper ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġfind Usage s (): ĠArray < Usage Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew PackageName Ġ= Ġoptions . move Target . package Wrapper ?. get QualifiedName () Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠ Ġfun Ġcollect Usage s (): ĠList < Usage Info > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġkotlin To Light Elements . values (). flatMap Ġ{ Ġit Ġ}. flatMap Ġ{ Ġlight Element Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Fq Name Ġ= ĠString Util . get QualifiedName ( new PackageName , Ġlight Element . getName ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfound References Ġ= ĠHashSet < Psi Reference >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Scope Ġ= Ġlight Element . getProject (). project Scope () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= ĠReferences Search ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. search ( light Element , Ġproject Scope , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map To ( ArrayList < Usage Info ?> ()) Ġ{ Ġref Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( found References . add ( ref ) Ġ&& Ġelements To Move . all Ġ{ Ġ! it . is Ancestor ( ref . getElement ()) }) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Move Usage Info If Possible ( ref , Ġlight Element , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġlight Element . get Kotlin Fq Name ()?. asString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText Occ urrences Util . find Non Code Usage s ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlight Element , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . search In Comments And Strings , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . search In Non Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Fq Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMove Class Handler . EP _ NAME . get Extensions (). forEach Ġ{ Ġhandler Ġ-> Ġhandler . preprocess Usage s ( results ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThere Ġmust Ġbe Ġa Ġconflict Ġif Ġall Ġof Ġthe Ġfollowing Ġconditions Ġare Ġsatisfied : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeclaration Ġis Ġpackage - private ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusage Ġdoes Ġnot Ġbelong Ġto Ġtarget Ġpackage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusage Ġis Ġnot Ġbeing Ġmoved Ġtogether Ġwith Ġdeclaration ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġfun Ġcollect Conflict s In Usage s ( us ages : ĠList < Usage Info >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeclaration To Containers Ġ= ĠHashMap < Jet Named Declaration , ĠMutable Set < Psi Element >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( usage Ġin Ġusage s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġusage . getElement () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element Ġ== Ġnull Ġ|| Ġusage Ġ! is ĠMove Rename Usage Info Ġ|| Ġusage Ġis ĠNon Code Usage Info ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeclaration Ġ= Ġusage . get Referenced Element ()?. named Un wrapped Element Ġas ? ĠJet Named Declaration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( declaration Ġ== Ġnull Ġ|| Ġ! declaration . is Private ()) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element . is Inside Of ( elements To Move )) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġelement . get Usage Context () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! declaration To Containers . get Or Put ( declaration ) Ġ{ ĠHashSet < Psi Element >() Ġ}. add ( container )) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Package Ġ= Ġelement . get Containing File ()?. get Containing Directory ()?. get Package () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Package ?. get QualifiedName () Ġ== Ġnew PackageName ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconflicts . put Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeclaration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJet Ref actor ing Bundle . message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" package . private . 0 . will . no . long er . be . accessible . from . 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRefactor ing UI Util . getDescription ( declaration , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRefactor ing UI Util . getDescription ( container , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcollect Conflict s In Declarations () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeclaration To Reference Targets Ġ= ĠHashMap < Jet Named Declaration , ĠMutable Set < Psi Element >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( declaration Ġin Ġelements To Move ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreference To Context Ġ= ĠJet File References Resolver . resolve ( element Ġ= Ġdeclaration , Ġresolve Qual ifiers Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( ref Expr , Ġbinding Context ) Ġin Ġreference To Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref Target Ġ= Ġbinding Context [ Binding Context . REFERENCE _ TARGET , Ġref Expr ]?. let Ġ{ Ġdescriptor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDescriptor To Source Utils Ide . get Any Declaration ( declaration . getProject (), Ġdescriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ref Target Ġ== Ġnull Ġ|| Ġref Target . is Inside Of ( elements To Move )) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackage Private Ġ= Ġwhen ( ref Target ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJet Modifier List Owner Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref Target . is Private () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPsi Modifier List Owner Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVisibility Util . get Visibility Modifier ( ref Target . get Modifier List ()) Ġ== ĠPsi Modifier . PACKAGE _ LOCAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! package Private ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! declaration To Reference Targets . get Or Put ( declaration ) Ġ{ ĠHashSet < Psi Element >() Ġ}. add ( ref Target )) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Package Ġ= Ġdeclaration . get Containing File ()?. get Containing Directory ()?. get Package () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Package ?. get QualifiedName () Ġ== Ġnew PackageName ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconflicts . put Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeclaration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJet Ref actor ing Bundle . message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 . uses . package . private . 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRefactor ing UI Util . getDescription ( declaration , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRefactor ing UI Util . getDescription ( ref Target , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). capitalize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġusage s Ġ= Ġcollect Usage s () ĊĠĠĠĠĠĠĠ Ġcollect Conflict s In Usage s ( us ages ) ĊĠĠĠĠĠĠĠ Ġcollect Conflict s In Declarations () ĊĠĠĠĠĠĠĠ Ġreturn ĠUsage View Util . remove D uplicated Usage s ( us ages . copy ToArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpreprocess Usage s ( ref Usage s : ĠRef < Array < Usage Info >> ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġshow Conflict s ( conflict s , Ġref Usage s . get ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġperform Ref actor ing ( us ages : ĠArray < out ĠUsage Info >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġmove Declaration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeclaration : ĠJet Named Declaration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Target : ĠKotlin Move Target , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusage sTo Process After Move : ĠMutable List < Usage Info > ĊĠĠĠĠĠĠĠ Ġ): ĠJet Named Declaration ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġdeclaration . get Containing File () Ġas ? ĠJet File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Ġ( file Ġ!= Ġnull , Ġ"${ declaration . java Class }: Ġ${ declaration . getText () }") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Psi Ġ= Ġmove Target . get OrCreate Target Psi ( declaration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget File Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target Psi Ġis ĠPsi Directory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexisting File Ġ= Ġif Ġ( target Psi Ġ!= Ġfile !!. get Containing Directory ()) Ġtarget Psi . find File ( file . getName ()) Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexisting File Ġ?: Ġdeclaration . get FileName After Move ()?. let Ġ{ create Kotlin File ( it , Ġtarget Psi )} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġtarget Psi ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( target File Ġis ĠJet File , Ġ" Couldn 't Ġcreate ĠK olt in Ġfile Ġfor : Ġ${ declaration . java Class }: Ġ${ declaration . getText () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget File Ġas ĠJet File ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( options . update Internal References ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpackageName Info Ġ= ĠPackage Name Info ( file !!. get Package Fq Name (), Ġtarget File . get Package Fq Name ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( us ages To Process Later , Ġusage sTo Process Now ) Ġ= Ġdeclaration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Internal References ToUpdate On PackageName Change ( packageName Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. partition Ġ{ Ġit Ġis ĠMove Rename Usage Info For Extension Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Process Move Usage s ( us ages To Process Now , Ġshort ening Mode Ġ= ĠShort ening Mode . NO _ SHORT EN ING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusage sTo Process After Move . addAll ( us ages To Process Later ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Element Ġ= Ġm over ( declaration , Ġtarget File ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Element . addTo Short ening Wait Set () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew Element ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusage List Ġ= Ġusage s . to ArrayList () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold To New Elements Mapping Ġ= ĠHashMap < Psi Element , ĠPsi Element >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( old Declaration , Ġold Light Elements ) Ġin Ġkotlin To Light Elements ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold File Ġ= Ġold Declaration . get Containing Jet File () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Declaration Ġ= Ġmove Declaration ( old Declaration , Ġoptions . move Target , Ġusage List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Declaration Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( old Element Ġin Ġold Light Elements ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold To New Elements Mapping [ old Element ] Ġ= Ġold Element ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold To New Elements Mapping [ old File ] Ġ= Ġnew Declaration . get Containing Jet File () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Transaction () !!. getElement Listener ( old Declaration ). element Moved ( new Declaration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( old Element , Ġnew Element ) Ġin Ġold Light Elements . stream () Ġzip Ġnew Declaration . to Light Elements (). stream ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold To New Elements Mapping [ old Element ] Ġ= Ġnew Element ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnon Code Usage s Ġ= Ġpost Process Move Usage s ( usage List , Ġold To New Elements Mapping ). copy ToArray () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠInc orrect OperationException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnon Code Usage s Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRefactor ing UI Util . process Incorrect Operation ( my Project , Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġperform Psi Spo iling Ref actor ing () Ġ{ ĊĠĠĠĠĠĠĠ Ġnon Code Usage s ?. let Ġ{ Ġnon Code Usage s Ġ-> ĠRename Util . rename Non Code Usage s ( my Project , Ġnon Code Usage s ) Ġ} ĊĠĠĠĠĠĠĠ Ġoptions . move Callback ?. refactor ing Completed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexecute ( us ages : ĠList < Usage Info >) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute ( us ages . copy ToArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget CommandName (): ĠString Ġ= ĠRE FACTOR ING _ NAME Ċ } Ċ