/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 6 Ġ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 . intent ions Ċ Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . openapi . util . Text Range Ċ import Ġorg . jetbrains . kotlin . idea . intent ions . br an ched Transform ations . evalu ates To Ċ import Ġorg . jetbrains . kotlin . lexer . Kt Tokens Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ Ċ class ĠReplace Substring With Drop Last Int ention Ġ: ĠReplace Substring Int ention (" Replace Ġ' substring ' Ġcall Ġwith Ġ' drop Last ' Ġcall ") Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapplic ability Range Inner ( element : ĠK t Dot Qualified Expression ): ĠText Range ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= Ġelement . call Expression ?. value Arguments Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( arguments . size Ġ!= Ġ 2 Ġ|| Ġ! element . is First Argument Zero ()) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġsecond Argument Expression Ġ= Ġarguments [ 1 ]. get Argument Expression () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( second Argument Expression Ġ! is ĠK t Binary Expression ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( second Argument Expression . operation Reference . get Referenced Name ElementType () Ġ!= ĠK t Tokens . MINUS ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( is Length Access ( second Argument Expression . left , Ġelement . receiver Expression )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠgetText Range ( element ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġapply To ( element : ĠK t Dot Qualified Expression , Ġeditor : ĠEditor ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġargument Ġ= Ġelement . call Expression !!. value Arguments [ 1 ]. get Argument Expression () !! ĊĠĠĠĠĠĠĠ Ġval Ġright Expression Ġ= Ġ( argument Ġas ĠK t Binary Expression ). right !! ĊĊĠĠĠĠĠĠĠ Ġelement . replace With ("$ 0 . drop Last ($ 1 )", Ġright Expression ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Length Access ( expression : ĠK t Expression ?, Ġexpected Receiver : ĠK t Expression ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġexpression Ġis ĠK t Dot Qualified Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġexpression . selector Expression . let Ġ{ Ġit Ġis ĠK t Name Reference Expression Ġ&& Ġit . get Referenced Name () Ġ== Ġ" length " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġexpression . receiver Expression . evalu ates To ( expected Receiver ) ĊĠĠĠ Ġ} Ċ } Ċ