/* Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ċ Ġ* Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . rust . ide . refactor ing . change Signature Ċ Ċ import Ġcom . intellij . openapi . action System . DataContext Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . ui . Messages Ċ import Ġcom . intellij . openapi . util . N ls Contexts . Dialog Message Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . refactor ing . Ref actor ing Bundle Ċ import Ġcom . intellij . refactor ing . change Signature . Change Signature Handler Ċ import Ġcom . intellij . refactor ing . util . Common Ref actor ing Util Ċ import Ġorg . rust . Rs Bundle Ċ import Ġorg . rust . cargo . project . workspace . Package Origin Ċ import Ġorg . rust . lang . core . psi .* Ċ import Ġorg . rust . lang . core . psi . ext .* Ċ import Ġorg . rust . openapi ext . editor Ċ import Ġorg . rust . openapi ext . element Under Caret In Editor Ċ import Ġorg . rust . openapi ext . is UnitTest Mode Ċ Ċ class ĠRs Change Signature Handler Ġ: ĠChange Signature Handler Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Target NotFound Message (): ĠString Ġ= Ġ" The Ġcaret Ġshould Ġbe Ġposition ed Ġat Ġa Ġfunction Ġor Ġmethod " ĊĊĠĠĠ Ġoverride Ġfun Ġfind Target Member ( element : ĠPsi Element ): ĠRs Function ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( el Ġin Ġelement . ance stors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( el ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs Function Ġ-> Ġel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs Call Expr Ġ-> Ġ( el . expr Ġas ? ĠRs Path Expr )?. path ?. reference ?. resolve () Ġas ? ĠRs Function ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs MethodCall Ġ-> Ġel . reference . resolve () Ġas ? ĠRs Function ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRs Block Ġ-> Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( project : ĠProject , Ġelements : ĠArray < out ĠPsi Element >, Ġdata Context : ĠData Context ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction Ġ= Ġelements . single OrNull () Ġas ? ĠRs Function Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġinvoke On Function ( function , Ġdata Context ?. editor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( project : ĠProject , Ġeditor : ĠEditor ?, Ġfile : ĠPsi File ?, Ġdata Context : ĠData Context ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunction Ġ= Ġdata Context ?. element Under Caret In Editor Ġas ? ĠRs Function Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġinvoke On Function ( function , Ġeditor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinvoke On Function ( function : ĠRs Function , Ġeditor : ĠEditor ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtarget Function Ġ= Ġget Super Method ( function ) Ġ?: Ġfunction ĊĠĠĠĠĠĠĠ Ġshow Ref actor ing Dialog ( target Function , Ġeditor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Ref actor ing Dialog ( function : ĠRs Function , Ġeditor : ĠEditor ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠRs Change Function Signature Config . create ( function ) ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġfunction . project ĊĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġcheck Function ( function ) ĊĠĠĠĠĠĠĠ Ġif Ġ( error Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Change Function Signature Dialog ( project , Ġconfig ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( editor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Cannot Ref actor Error Hint ( project , Ġeditor , Ġerror ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Cannot Ref actor Error Hint ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġeditor : ĠEditor , ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Un stable Api Usage ") Ġ@ Dialog Message Ġmessage : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCommon Ref actor ing Util . show Error Hint ( project , Ġeditor , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRefactor ing Bundle . get Cannot Ref actor Message ( message ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRefactor ing Bundle . message (" change Signature . refactor ing . name "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" refactor ing . change Signature " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġis Change Signature Available ( function : ĠRs Function ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcheck Function ( function ) Ġ== Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Un stable Api Usage ") ĊĠĠĠĠĠĠĠ Ġ@ Dialog Message ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcheck Function ( function : ĠRs Function ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function . containing C rate ?. origin Ġ!= ĠPackage Origin . WORK SPACE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Cannot Ġchange Ġsignature Ġof Ġfunction Ġin Ġa Ġforeign Ġcrate " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function . value Parameters Ġ!= Ġfunction . raw Value Parameters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRs Bundle . message (" refactor ing . change . signature . error . cfg . disabled . parameters ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġget Super Method ( function : ĠRs Function ): ĠRs Function ? Ġ{ ĊĠĠĠ Ġval Ġsuper Method Ġ= Ġfunction . super Item Ġas ? ĠRs Function Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġval Ġfunction Name Ġ= Ġfunction . name Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġval Ġtrait Name Ġ= Ġ( super Method . owner Ġas ? ĠRs Abstract able Owner . Trait )?. trait ?. name Ġ?: Ġreturn Ġnull ĊĊĠĠĠ Ġval Ġmessage Ġ= ĠRs Bundle . message (" refactor ing . change . signature . refactor . super . function ", ĊĠĠĠĠĠĠĠ Ġfunction Name , ĊĠĠĠĠĠĠĠ Ġtrait Name ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġchoice : ĠInt Ġ= Ġif Ġ( is UnitTest Mode ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMessages . YES ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠMessages . show Yes No Cancel Dialog ( function . project , Ġmessage , ĠRs Bundle . message (" refactor ing . change . signature . name "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMessages . get Question Icon ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġwhen Ġ( choice ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMessages . YES Ġ-> Ġsuper Method ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} Ċ } Ċ