/* Ċ Ġ* Ġ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 . intro duce . intro duce Parameter Ċ Ċ import Ġcom . intellij . openapi . action System . DataContext Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi . Psi Document Manager Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . util . Psi Tree Util Ċ import Ġcom . intellij . refactor ing . intro duce . inplace . Abstract In place Intro ducer Ċ import Ġcom . intellij . util . containers . Multi Map Ċ import Ġorg . jetbrains . kotlin . descriptors . Class Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Function Descriptor Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . analyze Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . get Resolution Facade Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . resolve To Descriptor Ċ import Ġorg . jetbrains . kotlin . idea . core . Kotlin Name Suggest er Ċ import Ġorg . jetbrains . kotlin . idea . core . New Declaration Name Validator Ċ import Ġorg . jetbrains . kotlin . idea . core . get Resolution Scope Ċ import Ġorg . jetbrains . kotlin . idea . core . refactor ing . run Ref actor ing With Post processing Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . Jet Ref actor ing Bundle Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . change Signature .* Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . intro duce . Kotlin Intro duce Handler Base Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . intro duce . extraction Engine .* Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . intro duce . select Elements With Target Parent Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . intro duce . show Error Hint Ċ import Ġorg . jetbrains . kotlin . idea . refactor ing . intro duce . show Error Hint ByKey Ċ import Ġorg . jetbrains . kotlin . idea . references . main Reference Ċ import Ġorg . jetbrains . kotlin . idea . search . us ages Search . Default Search Helper Ċ import Ġorg . jetbrains . kotlin . idea . search . us ages Search . Usage s Search Target Ċ import Ġorg . jetbrains . kotlin . idea . search . us ages Search . search Ċ import Ġorg . jetbrains . kotlin . idea . util . Ide Descriptor Render ers Ċ import Ġorg . jetbrains . kotlin . idea . util . application . execute Command Ċ import Ġorg . jetbrains . kotlin . idea . util . application . run Write Action Ċ import Ġorg . jetbrains . kotlin . idea . util . approx imate With Res olvable Type Ċ import Ġorg . jetbrains . kotlin . idea . util . psi . pattern Matching . Jet Psi Range Ċ import Ġorg . jetbrains . kotlin . idea . util . psi . pattern Matching . Jet Psi Un ifier Ċ import Ġorg . jetbrains . kotlin . idea . util . psi . pattern Matching . to Range Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . psi . psi Util .* Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . calls . call Util . get Resolved Call Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . re ceiv ers . This Receiver Ċ import Ġorg . jetbrains . kotlin . types . type Util . is Nothing Ċ import Ġorg . jetbrains . kotlin . types . type Util . is Unit Ċ import Ġorg . jetbrains . kotlin . types . type Util . sup ert ypes Ċ import Ġjava . util . Collections Ċ import Ġkotlin . test . fail Ċ Ċ public Ġdata Ġclass ĠIntro duce Parameter Descriptor ( ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Range : ĠJet Psi Range , ĊĠĠĠĠĠĠĠ Ġval Ġcallable : ĠJet Named Declaration , ĊĠĠĠĠĠĠĠ Ġval Ġcallable Descriptor : ĠFunction Descriptor , ĊĠĠĠĠĠĠĠ Ġval Ġnew ParameterName : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġnew ParameterType Text : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġnew Argument Value : ĠJet Expression , ĊĠĠĠĠĠĠĠ Ġval Ġwith DefaultValue : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġparameters Usage s : ĠMulti Map < Jet Element , ĠJet Element >, ĊĠĠĠĠĠĠĠ Ġval Ġoccurrences To Replace : ĠList < Jet Psi Range >, ĊĠĠĠĠĠĠĠ Ġval Ġparameters ToRemove : ĠList < Jet Element > Ġ= Ġget Parameters ToRemove ( with DefaultValue , Ġparameters Usage s , Ġoccurrences To Replace ), ĊĠĠĠĠĠĠĠ Ġval Ġoccurrence Re placer : ĠIntro duce Parameter Descriptor .( Jet Psi Range ) Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ{ ĊĠĠĠ Ġval Ġoriginal Occurrence : ĠJet Psi Range ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġoccurrences To Replace . first Ġ{ Ġit . getText Range (). intersect s ( original Range . getText Range ()) Ġ} ĊĠĠĠ Ġval Ġval Var : ĠJet Val Var ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Var Ġ= Ġif Ġ( callable Ġis ĠJet Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodifier Is Un necessary : Ġ( Psi Element ) Ġ-> ĠBoolean Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getParent () Ġ!= Ġcallable . getBody () Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġis ĠJet Class Initializer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġis ĠJet Property Ġ&& Ġit . get Initializer ()?. getText Range ()?. intersect s ( original Range . getText Range ()) Ġ?: Ġfalse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( occ urrences To Replace . all Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPsi Tree Util . find Common Parent ( it . elements )?. parent sWith Self ?. any ( modifier Is Un necessary ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĠJet Val Var . None Ġelse ĠJet Val Var . Val ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse ĠJet Val Var . None ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġget Parameters ToRemove ( ĊĠĠĠĠĠĠĠ Ġwith DefaultValue : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġparameters Usage s : ĠMulti Map < Jet Element , ĠJet Element >, ĊĠĠĠĠĠĠĠ Ġoccurrences To Replace : ĠList < Jet Psi Range > Ċ ): ĠList < Jet Element > Ġ{ ĊĠĠĠ Ġif Ġ( with DefaultValue ) Ġreturn ĠCollections . emptyList () ĊĊĠĠĠ Ġval Ġoccurrence Ranges Ġ= Ġoccurrences To Replace . map Ġ{ Ġit . getText Range () Ġ} ĊĠĠĠ Ġreturn Ġparameters Usage s . entrySet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . value . all Ġ{ Ġparam Usage Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoccurrence Ranges . any Ġ{ Ġoccurrence Range Ġ-> Ġoccurrence Range . contains ( param Usage . getText Range ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . key Ġ} Ċ } Ċ Ċ fun ĠIntro duce Parameter Descriptor . perform Ref actor ing () Ġ{ ĊĠĠĠ Ġrun Write Action Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= Ġobject Ġ: ĠJet Change Signature Configuration Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconfigure ( original Descriptor : ĠJet MethodDescriptor , Ġbinding Context : ĠBinding Context ): ĠJet MethodDescriptor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġoriginal Descriptor . modify Ġ{ Ġmethod Descriptor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! with DefaultValue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġcallable . getValue Parameters () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwith Receiver Ġ= Ġmethod Descriptor . receiver Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters ToRemove ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠJet Parameter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . indexOf ( it ) Ġ+ Ġif Ġ( with Receiver ) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort Descending () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġmethod Descriptor . remove Parameter ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameter Info Ġ= ĠJet Parameter Info ( callable Descriptor Ġ= Ġcallable Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġnew ParameterName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue For Call Ġ= Ġif Ġ( with DefaultValue ) Ġnull Ġelse Ġnew Argument Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdefaultValue For Parameter Ġ= Ġif Ġ( with DefaultValue ) Ġnew Argument Value Ġelse Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Or Var Ġ= Ġval Var ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter Info . current Type Text Ġ= Ġnew ParameterType Text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Descriptor . add Parameter ( parameter Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġperform Sil ently ( affected Functions : ĠCollection < Psi Element >): ĠBoolean Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġcallable . getProject (); ĊĠĠĠĠĠĠĠ Ġval Ġchange Signature Ġ= Ġ{ Ġrun Change Signature ( project , Ġcallable Descriptor , Ġconfig , Ġcallable . analyze (), Ġcallable , ĠINT RO DU CE _ PARAMETER ) Ġ} ĊĠĠĠĠĠĠĠ Ġchange Signature . run Ref actor ing With Post processing ( project , Ġ" refactor ing . change Signature ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoccurrences To Replace . forEach Ġ{ Ġoccurrence Re placer ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġ[ V IST ALL ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// project . getMessage Bus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ. sync Publisher ( Ref actor ing EventListener . RE FACTOR ING _ EVENT _ TOPIC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġ. refactor ing Done ( INT RO DU CE _ PARAMETER _ RE FACTOR ING _ ID , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġis Object Or Non Inner Class ( e : ĠPsi Element ): ĠBoolean Ġ= Ġe Ġis ĠJet Object Declaration Ġ|| Ġ( e Ġis ĠJet Class Ġ&& Ġ! e . is Inner ()) Ċ Ċ fun Ġselect New Parameter Context ( ĊĠĠĠĠĠĠĠ Ġeditor : ĠEditor , ĊĠĠĠĠĠĠĠ Ġfile : ĠPsi File , ĊĠĠĠĠĠĠĠ Ġcontinuation : Ġ( elements : ĠList < Psi Element >, Ġtarget Parent : ĠPsi Element ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġselect Elements With Target Parent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation Name Ġ= ĠINT RO DU CE _ PARAMETER , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor Ġ= Ġeditor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Ġ= Ġfile , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Containers Ġ= Ġ{ Ġelements , Ġparent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparents Ġ= Ġparent . parents ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstop At Ġ= Ġ( parent . parents Ġzip Ġparent . parents . drop ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġis Object Or Non Inner Class ( it . first ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . second ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( stop At Ġ!= Ġnull ) Ġparent . parents . take While Ġ{ Ġit Ġ!= Ġstop At Ġ} Ġelse Ġparents ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( it Ġis ĠJet Class Ġ&& Ġ! it . is Interface () Ġ&& Ġit Ġ! is ĠJet Enum Entry ) Ġ|| Ġit Ġis ĠJet Named Function Ġ|| Ġit Ġis ĠJet Secondary Constructor ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( it Ġas ĠJet Named Declaration ). getValue Parameter List () Ġ!= Ġnull Ġ|| Ġit . getName Identifier () Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation Ġ= Ġcontinuation ĊĠĠĠ Ġ) Ċ } Ċ Ċ public Ġinterface ĠKotlin Intro duce Parameter Helper Ġ{ ĊĠĠĠ Ġobject ĠDefault : ĠKotlin Intro duce Parameter Helper ĊĊĠĠĠ Ġfun Ġconfigure ( descriptor : ĠIntro duce Parameter Descriptor ): ĠIntro duce Parameter Descriptor Ġ= Ġdescriptor Ċ } Ċ Ċ public Ġopen Ġclass ĠKotlin Intro duce Parameter Handler ( ĊĠĠĠĠĠĠĠ Ġval Ġhelper : ĠKotlin Intro duce Parameter Helper Ġ= ĠKotlin Intro duce Parameter Helper . Default Ċ ): ĠKotlin Intro duce Handler Base () Ġ{ ĊĠĠĠ Ġopen Ġfun Ġinvoke ( project : ĠProject , Ġeditor : ĠEditor , Ġexpression : ĠJet Expression , Ġtarget Parent : ĠJet Named Declaration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġexpression . analyze () ĊĊĠĠĠĠĠĠĠ Ġval Ġexpression Type Ġ= Ġcontext . getType ( expression ) !! ĊĠĠĠĠĠĠĠ Ġif Ġ( expression Type . is Unit () Ġ|| Ġexpression Type . is Nothing ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠJet Ref actor ing Bundle . message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" cannot . intro duce . parameter . of . 0 . type ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIde Descriptor Render ers . SOURCE _ CODE _ SHORT _ NAMES _ IN _ TYPES . render Type ( expression Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error Hint ( project , Ġeditor , Ġmessage , ĠINT RO DU CE _ PARAMETER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġcontext [ Binding Context . DECL AR ATION _ TO _ DESCRIPTOR , Ġtarget Parent ] ĊĠĠĠĠĠĠĠ Ġval Ġfunction Descriptor : ĠFunction Descriptor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFunction Descriptor Ġ-> Ġdescriptor Ġ: ĠFunction Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠClass Descriptor Ġ-> Ġdescriptor . getUn subst it uted Primary Constructor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠAssertionError (" Unexpected Ġelement Ġtype : Ġ${ target Parent . getElement Text WithContext () }") ĊĠĠĠĠĠĠĠ Ġval Ġreplacement Type Ġ= Ġexpression Type . approx imate With Res olvable Type ( target Parent . get Resolution Scope ( context , Ġtarget Parent . get Resolution Facade ()), Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġwhen Ġ( target Parent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJet Function Ġ-> Ġtarget Parent . getBody Expression () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJet Class Ġ-> Ġtarget Parent . getBody () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠAssertionError (" Body Ġelement Ġis Ġnot Ġfound : Ġ${ target Parent . getElement Text WithContext () }") ĊĠĠĠĠĠĠĠ Ġval Ġname Validator Ġ= ĠNew Declaration Name Validator ( body , Ġsequence Of ( body ), ĠNew Declaration Name Validator . Target . VARIABLE S ) ĊĠĠĠĠĠĠĠ Ġval Ġsuggested Names Ġ= ĠKotlin Name Suggest er . suggest Names ByType ( replacement Type , Ġname Validator , Ġ" p ") ĊĊĠĠĠĠĠĠĠ Ġval Ġparameters Usage s Ġ= Ġfind Internal Usage s Of Parameters And Receiver ( target Parent , Ġfunction Descriptor ) ĊĊĠĠĠĠĠĠĠ Ġval Ġforbidden Ranges Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target Parent Ġis ĠJet Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Parent . get Declarations (). filter Ġ{ Ġis Object Or Non Inner Class ( it ) Ġ}. map Ġ{ Ġit . getText Range () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCollections . emptyList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġoccurrences To Replace Ġ= Ġexpression . to Range () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. match ( body , ĠJet Psi Un ifier . DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Range Ġ= Ġit . range . getText Range () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforbidden Ranges . any Ġ{ Ġit . intersect s ( text Range ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatched Element Ġ= Ġit . range . elements . single OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( matched Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJet Expression Ġ-> Ġmatched Element ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJet String Template Entry With Expression Ġ-> Ġmatched Element . get Expression () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġas ? ĠJet Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Range () Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject . execute Command ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINT RO DU CE _ PARAMETER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Test Mode Ġ= ĠApplication Manager . getApplication (). is UnitTest Mode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinplace Is Available Ġ= Ġeditor . get Settings (). is Variable In place Rename Enabled () Ġ&& Ġ! is Test Mode ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Expression Ġ= ĠJet Psi Util . safe De parent hesize ( expression ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpsi Factory Ġ= ĠJet Psi Factory ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintroduce Parameter Descriptor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . configure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntro duce Parameter Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Range Ġ= Ġoriginal Expression . to Range (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallable Ġ= Ġtarget Parent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallable Descriptor Ġ= Ġfunction Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ParameterName Ġ= Ġsuggested Names . first (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ParameterType Text Ġ= ĠIde Descriptor Render ers . SOURCE _ CODE _ SHORT _ NAMES _ IN _ TYPES . render Type ( replacement Type ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Argument Value Ġ= Ġoriginal Expression , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith DefaultValue Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters Usage s Ġ= Ġparameters Usage s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoccurrences To Replace Ġ= Ġoccurrences To Replace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoccurrence Re placer Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . elements . single (). replace ( psi Factory . create Expression ( new ParameterName )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Test Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintroduce Parameter Descriptor . perform Ref actor ing () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inplace Is Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( Psi Document Manager . getInstance ( project )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommit Document ( editor . getDocument ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Post p oned Operations And Un block Document ( editor . getDocument ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintro ducer Ġ= ĠKotlin In place Parameter Intro ducer ( intro duce Parameter Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ Ġreplacement Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ Ġsuggested Names . to Typed Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠĠĠĠ Ġeditor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intro ducer . start In place Intro duce Template ()) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Intro duce Parameter Dialog ( project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintroduce Parameter Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuggested Names . to Typed Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( replacement Type ) Ġ+ Ġreplacement Type . sup ert ypes (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelper ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( project : ĠProject , Ġeditor : ĠEditor , Ġfile : ĠPsi File , Ġdata Context : ĠData Context ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( Abstract In place Intro ducer . getActive Intro ducer ( editor ) Ġas ? ĠKotlin In place Parameter Intro ducer )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . switch To Dialog UI () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( file Ġ! is ĠJet File ) Ġreturn ĊĠĠĠĠĠĠĠ Ġselect New Parameter Context ( editor , Ġfile ) Ġ{ Ġelements , Ġtarget Parent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpression Ġ= Ġ(( elements . single OrNull () Ġas ? ĠJet Block Expression )?. getState ments () Ġ?: Ġelements ). single OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expression Ġis ĠJet Expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke ( project , Ġeditor , Ġexpression , Ġtarget Parent Ġas ĠJet Named Declaration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error Hint ByKey ( project , Ġeditor , Ġ" cannot . refactor . no . expression ", ĠINT RO DU CE _ PARAMETER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( project : ĠProject , Ġelements : ĠArray < out ĠPsi Element >, Ġdata Context : ĠData Context ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġfail ("$ INT RO DU CE _ PARAMETER Ġcan Ġonly Ġbe Ġinvoked Ġfrom Ġeditor ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġfind Internal Usage s Of Parameters And Receiver ( ĊĠĠĠĠĠĠĠ Ġtarget Parent : ĠJet Named Declaration , ĊĠĠĠĠĠĠĠ Ġtarget Descriptor : ĠFunction Descriptor Ċ ): ĠMulti Map < Jet Element , ĠJet Element > Ġ{ ĊĠĠĠ Ġval Ġusage s Ġ= ĠMulti Map < Jet Element , ĠJet Element >() ĊĠĠĠ Ġtarget Parent . getValue Parameters () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . has Val Or Var () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparam Usage s Ġ= ĠDefault Search Helper < Jet Parameter >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. new Request ( Usage s Search Target ( element Ġ= Ġit )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. search () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . getElement () Ġas ĠJet Element Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( param Usage s . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusage s . put ( it , Ġparam Usage s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġval Ġreceiver Type Ref Ġ= Ġ( target Parent Ġas ? ĠJet Function )?. get Receiver Type Reference () ĊĠĠĠ Ġif Ġ( receiver Type Ref Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtarget Parent . accept Children ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠJet Tree Visitor Void () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit This Expression ( expression : ĠJet This Expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . visit This Expression ( expression ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expression . getInstance Reference (). main Reference . resolve () Ġ== Ġtarget Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusage s . put Value ( receiver Type Ref , Ġexpression ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Jet Element ( element : ĠJet Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . visit Jet Element ( element ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Context Ġ= Ġelement . analyze () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolved Call Ġ= Ġelement . get Resolved Call ( binding Context ) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( resolved Call . getExtension Receiver () Ġas ? ĠThis Receiver )?. get Declaration Descriptor () Ġ== Ġtarget Descriptor Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( resolved Call . get Dispatch Receiver () Ġas ? ĠThis Receiver )?. get Declaration Descriptor () Ġ== Ġtarget Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusage s . put Value ( receiver Type Ref , Ġresolved Call . get Call (). get Call Element ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġusage s Ċ } Ċ Ċ interface ĠKotlin Intro duce Lambda Parameter Helper : ĠKotlin Intro duce Parameter Helper Ġ{ ĊĠĠĠ Ġobject ĠDefault : ĠKotlin Intro duce Lambda Parameter Helper ĊĊĠĠĠ Ġfun Ġconfigure Extract Lambda ( descriptor : ĠExtract able Code Descriptor ): ĠExtract able Code Descriptor Ġ= Ġdescriptor Ċ } Ċ Ċ public Ġopen Ġclass ĠKotlin Intro duce Lambda Parameter Handler ( ĊĠĠĠĠĠĠĠ Ġhelper : ĠKotlin Intro duce Lambda Parameter Helper Ġ= ĠKotlin Intro duce Lambda Parameter Helper . Default Ċ ): ĠKotlin Intro duce Parameter Handler ( helper ) Ġ{ ĊĠĠĠ Ġval Ġextract Lambda Helper Ġ= Ġobject : ĠEx traction Engine Helper ( INT RO DU CE _ L AMBDA _ PARAMETER ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor : ĠEditor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlambda Extraction Descriptor : ĠExtract able Code Descriptor ĊĠĠĠĠĠĠĠ Ġ): ĠKotlin Intro duce Parameter Dialog Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallable Ġ= Ġlambda Extraction Descriptor . extraction Data . target Sibling Ġas ĠJet Named Declaration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= Ġcallable . resolve To Descriptor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallable Descriptor : ĠFunction Descriptor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFunction Descriptor Ġ-> Ġdescriptor Ġ: ĠFunction Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠClass Descriptor Ġ-> Ġdescriptor . getUn subst it uted Primary Constructor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠAssertionError (" Unexpected Ġelement Ġtype : Ġ${ callable . getElement Text WithContext () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Range Ġ= Ġlambda Extraction Descriptor . extraction Data . original Range ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintroduce Parameter Descriptor Ġ= ĠIntro duce Parameter Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Range Ġ= Ġoriginal Range , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallable Ġ= Ġcallable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallable Descriptor Ġ= Ġcallable Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ParameterName Ġ= Ġ"", Ġ// Ġto Ġbe Ġchosen Ġin Ġthe Ġdialog ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew ParameterType Text Ġ= Ġ"", Ġ// Ġto Ġbe Ġchosen Ġin Ġthe Ġdialog ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Argument Value Ġ= ĠJet Psi Factory ( project ). create Expression ("{} "), Ġ// Ġsubstit uted Ġlater ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith DefaultValue Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters Usage s Ġ= Ġfind Internal Usage s Of Parameters And Receiver ( callable , Ġcallable Descriptor ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoccurrences To Replace Ġ= ĠlistOf ( original Range ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters ToRemove Ġ= ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKotlin Intro duce Parameter Dialog ( project , Ġeditor , Ġintroduce Parameter Descriptor , Ġlambda Extraction Descriptor , Ġhelper ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconfigure And Run ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor : ĠEditor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor With Conflict s : ĠExtract able Code Descriptor With Conflict s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Finish : Ġ( Extraction Result ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlambda Extraction Descriptor Ġ= Ġhelper . configure Extract Lambda ( descriptor With Conflict s . descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Extraction Target . FA KE _ L AM BD ALI KE _ FUNCTION . is Available ( lambda Extraction Descriptor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error Hint ( project , Ġeditor , Ġ" Can 't Ġintroduce Ġlambda Ġparameter Ġfor Ġthis Ġexpression ", ĠINT RO DU CE _ L AMBDA _ PARAMETER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġcreate Dialog ( project , Ġeditor , Ġlambda Extraction Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Application Manager . getApplication () !!. is UnitTest Mode ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . perform Ref actor ing () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( project : ĠProject , Ġeditor : ĠEditor , Ġexpression : ĠJet Expression , Ġtarget Parent : ĠJet Named Declaration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġduplicate Container Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( target Parent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJet Function Ġ-> Ġtarget Parent . getBody Expression () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJet Class Ġ-> Ġtarget Parent . getBody () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠAssertionError (" Body Ġelement Ġis Ġnot Ġfound : Ġ${ target Parent . getElement Text WithContext () }") ĊĠĠĠĠĠĠĠ Ġval Ġextraction Data Ġ= ĠEx traction Data ( expression . get Containing Jet File (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression . to Range (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Parent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduplicate Container , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx traction Options . DEFAULT ) ĊĠĠĠĠĠĠĠ ĠEx traction Engine ( extract Lambda Helper ). run ( editor , Ġextraction Data ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠINT RO DU CE _ PARAMETER _ RE FACTOR ING _ ID : ĠString Ġ= Ġ" kotlin . refactor ing . intro duce Parameter " Ċ Ċ val ĠINT RO DU CE _ PARAMETER : ĠString Ġ= Ġ" Intro duce ĠParameter " Ċ val ĠINT RO DU CE _ L AMBDA _ PARAMETER : ĠString Ġ= Ġ" Intro duce ĠLambda ĠParameter " Ċ