/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ċ Ġ* Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . u ast . test . kotlin Ċ Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . extensions . Extensions Ċ import Ġcom . intellij . openapi . util . Dis poser Ċ import Ġcom . intellij . patterns . u ast . literal Expression Ċ import Ġcom . intellij . psi .* Ċ import Ġcom . intellij . psi . impl . source . resolve . reference . Psi Reference Contributor EP Ċ import Ġcom . intellij . psi . impl . source . resolve . reference . Reference Providers Registry Ċ import Ġcom . intellij . psi . impl . source . resolve . reference . Reference Providers Registry Impl Ċ import Ġcom . intellij . psi . util . Property Util Ċ import Ġcom . intellij . test Framework . Light Project Descriptor Ċ import Ġcom . intellij . test Framework . register Service Instance Ċ import Ġorg . jetbrains . kotlin . idea . test . Kotlin Light Code Insight Fixture TestCase Ċ import Ġorg . jetbrains . kotlin . idea . test . Kotlin With J dk And Runtime Light Project Descriptor Ċ import Ġorg . jetbrains . u ast . U Expression Ċ import Ġorg . jetbrains . u ast . evaluate String Ċ import Ġorg . jetbrains . u ast . to U Element OfType Ċ import Ġorg . junit . Test Ċ import Ġkotlin . test . fail ĊĊ Ċ class ĠKotlin U ast References Test Ġ: ĠKotlin Light Code Insight Fixture TestCase () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Project Descriptor (): ĠLight Project Descriptor Ġ= ĠKotlin With J dk And Runtime Light Project Descriptor . INSTANCE ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġoriginal Ġgetter Ġis Ġvisible Ġwhen Ġreference Ġis Ġunder Ġrenaming `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġregister Reference Providers ( test Root Disposable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister U ast Reference Provider ( literal Expression (), Ġu ast Literal Reference Provider Ġ{ Ġ_, Ġpsi Language Injection Host Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Getter Reference (" Kotlin Bean ", Ġpsi Language Injection Host )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmy Fixture . configure By Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Kotlin Bean . kt ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġclass ĠKotlin Bean ( val Ġmy F < caret > ield : ĠString ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreference Ġ= Ġ" my Field " ĊĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġmy Fixture . rename ElementAt Caret (" my Rename d Field ") ĊĊĠĠĠĠĠĠĠ Ġmy Fixture . check Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġclass ĠKotlin Bean ( val Ġmy Rename d Field : ĠString ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreference Ġ= Ġ" my Rename d Field " ĊĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ private Ġclass ĠGetter Reference ( ĊĠĠĠ Ġval ĠclassName : ĠString , ĊĠĠĠ Ġpsi Element : ĠPsi Element Ċ ) Ġ: ĠPsi Reference Base < Psi Element >( psi Element ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġresolve (): ĠPsi Method ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpsi Class Ġ= ĠJava Psi Facade . getInstance ( element . project ). find Class ( className , Ġelement . resolve Scope ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġelement . to U Element OfType < U Expression >() ?. evaluate String () Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn ĠProperty Util . get Get ters ( psi Class , Ġname ). first OrNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Element Rename ( new ElementName : ĠString ): ĠPsi Element Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresolve Ġ= Ġresolve () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfail (" can 't Ġresolve Ġduring Ġrename , Ġlooks Ġlike Ġsomeone Ġrenamed Ġor Ġremoved Ġthe Ġsource Ġelement Ġbefore Ġupdating Ġreferences ") ĊĊĠĠĠĠĠĠĠ Ġval ĠnewName Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Property Util . getProperty Name ( resolve ) Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProperty Util . getProperty Name ( new ElementName ) Ġ?: Ġnew ElementName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġnew ElementName ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . handle Element Rename ( new Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Variants (): ĠArray < Any > Ġ= Ġempty Array () Ċ } ĊĊ Ċ fun Ġregister Reference Providers ( dis posable : ĠDis posable , Ġregister Contribut ors : ĠPsi Reference Registrar . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġregister Reference Contributor ( object Ġ: ĠPsi Reference Contributor () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġregister Reference Providers ( regist rar : ĠPsi Reference Registrar ) Ġ= Ġregist rar . register Contribut ors () ĊĠĠĠ Ġ}, Ġdis posable ) Ċ } Ċ Ċ fun Ġregister Reference Contributor ( contributor : ĠPsi Reference Contributor , Ġdis posable : ĠDis posable ) Ġ{ ĊĠĠĠ Ġval Ġreference Contributor Ep Ġ= ĠExtensions . get Area ( null ). getExtension Point < Psi Reference Contributor EP >( Psi Reference Contributor . EP _ NAME . name ) ĊĊĠĠĠ Ġval Ġcontributor Ep Ġ= Ġobject Ġ: ĠPsi Reference Contributor EP () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetInstance (): ĠPsi Reference Contributor Ġ= Ġcontributor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreference Contributor Ep . register Extension ( contributor Ep ) ĊĊĠĠĠ Ġval Ġapplication Ġ= ĠApplication Manager . getApplication () ĊĊĠĠĠ Ġ// we Ġneed Ġa Ġfresh ĠReference Providers Registry Ġafter Ġupdating ĠReference Contribut ors ĊĠĠĠ Ġval Ġold Reference Provider Registry Ġ= ĊĠĠĠĠĠĠĠ Ġapplication . p ico Container . getComponent Instance ( Reference Providers Registry :: class . java ) Ġas ĠReference Providers Registry ĊĠĠĠ Ġapplication . register Service Instance ( Reference Providers Registry :: class . java , ĠReference Providers Registry Impl ()) ĊĊĠĠĠ ĠDis poser . register ( dis posable , ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġreference Contributor Ep . unregister Extension ( contributor Ep ) ĊĠĠĠĠĠĠĠ Ġapplication . register Service Instance ( Reference Providers Registry :: class . java , Ġold Reference Provider Registry ) ĊĠĠĠ Ġ}) Ċ Ċ } ĊĊĊĊĊ