/* Ċ Ġ* ĠĠĠ ĠCopyright Ġ[ 2 0 2 1 ] Ġ[ MR 3 Y ] Ċ Ġ* Ċ Ġ* ĠĠĠ Ġ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 Ġcom . mr 3 y . plugins . k ro ovy Ċ Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . util . Conditions Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . util . Psi Tree Util Ċ import Ġorg . jetbrains . kotlin . daemon . common . trim Quotes Ċ import Ġorg . jetbrains . kotlin . psi . Kt Psi Factory Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . Gro ovy Recursive Element Visitor Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . api . statements . Gr Variable Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . api . statements . Gr Variable Declaration Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . api . statements . expressions . Gr Assignment Expression Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . api . statements . expressions . literals . Gr Literal Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . api . statements . expressions . path . Gr Call Expression Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . api . statements . expressions . path . Gr MethodCall Expression Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . api . types . Gr BuiltIn Type Element Ċ Ċ class ĠGro ovy Visitor ( private Ġval Ġproject : ĠProject ): ĠGro ovy Recursive Element Visitor (){ ĊĊĠĠĠ Ġprivate Ġval Ġfactory Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠK t Psi Factory ( project ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// TODO : Ġadd Ġcode Style Manager ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Variable Declaration ( variable Declaration : ĠGr Variable Declaration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . visit Variable Declaration ( variable Declaration ) ĊĠĠĠĠĠĠĠ Ġval Ġvar Initializing Ġ= ĠPsi Tree Util . getChild OfType ( variable Declaration , ĠGr Variable :: class . java ) !! ĊĠĠĠĠĠĠĠ Ġif Ġ( var Initializing . text . contains (" =" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodifiers Ġ= Ġvariable Declaration . modifier List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( modifiers . text . contains (" def ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġval Modifier Ġ= Ġfactory . create Val Keyword (). firstChild ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifiers . replace ( val Modifier ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠPsi Tree Util . find Child OfType ( variable Declaration , ĠGr BuiltIn Type Element :: class . java ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtyped Variable Ġ= Ġfactory . create Property (" val Ġx : Ġ${ type . text . capitalize ()} Ġ= Ġ 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Variable . findElement At ( 4 ) !!. replace ( var Initializing . firstChild ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Variable . last Child !!. replace ( var Initializing . last Child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( variable Ġin Ġvariable Declaration . variables ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabstract Declaration In Kotlin Ġ= Ġfactory . create Val Keyword () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabstract Declaration In Kotlin . findElement At ( 4 ) !!. replace ( variable . name Identifier !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= ĠPsi Tree Util . findFirst Parent ( variable Declaration , ĠConditions . always True ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent ?. add After ( abstract Declaration In Kotlin , Ġvariable Declaration ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvariable Declaration . remove Statement () Ġ// Ġit Ġcan Ġbe Ġsafely Ġremoved Ġnow ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Assignment Expression ( expression : ĠGr Assignment Expression ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . visit Assignment Expression ( expression ) ĊĠĠĠĠĠĠĠ Ġval Ġr Operand Ġ= Ġexpression . last Child ĊĠĠĠĠĠĠĠ Ġif ( is Single Quoted String ( r Operand )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt String Ġ= Ġfactory . create Literal String Template Entry ( r Operand . text . trim Quotes ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr Operand . replace ( kt String ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit MethodCall Expression ( method Call Expression : ĠGr MethodCall Expression ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . visit MethodCall Expression ( method Call Expression ) ĊĠĠĠĠĠĠĠ Ġval Ġcall Expression With Quotes Ġ= ĠStringBuilder ( method Call Expression . firstChild . text ) ĊĠĠĠĠĠĠĠ Ġcall Expression With Quotes . append (' (' ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( argument Ġin Ġmethod Call Expression . argument List . all Arguments ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( is Single Quoted String ( argument )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkt String Ġ= Ġfactory . create Literal String Template Entry ( argument . text . trim Quotes ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Expression With Quotes . append ( kt String ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall Expression With Quotes . append (',') ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcall Expression With Quotes . delete Char At ( call Expression With Quotes . length Ġ- Ġ 1 ) Ġ// Ġrm Ġlast Ġargument Ġcomma ĊĠĠĠĠĠĠĠ Ġcall Expression With Quotes . append (' )') ĊĠĠĠĠĠĠĠ Ġmethod Call Expression . replace ( factory . create Expression ( call Expression With Quotes . toString ())) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Single Quoted String ( element : ĠPsi Element ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( element Ġis ĠGr Literal Ġ&& Ġelement . text . matches ( SINGLE _ QUOT ED _ PATTERN . to Regex ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠS INGLE _ QUOT ED _ PATTERN Ġ= Ġ""" ^ '. { 2 , }' $ """ ĊĠĠĠ Ġ} Ċ }