package Ġorg . are nd . quick fix . remo vers Ċ Ċ import Ġcom . intellij . code Insight . int ention . Int ention Action Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi .* Ċ import Ġcom . intellij . psi . impl . source . tree . Leaf Psi Element Ċ import Ġorg . are nd . psi .* Ċ import Ġorg . are nd . psi . ext . Are nd Pattern Impl Mixin Ċ Ċ class ĠRemove Patterns Quick Fix ( private Ġval Ġpattern Ref : ĠSmart Psi Element Pointer < Are nd Pattern Impl Mixin >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġsingle : ĠBoolean ) Ġ: ĠInt ention Action Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġstart In Write Action () Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġget Family Name () Ġ= Ġ" are nd . pattern " ĊĊĠĠĠ Ġoverride Ġfun Ġis Available ( project : ĠProject , Ġeditor : ĠEditor ?, Ġfile : ĠPsi File ?) Ġ= Ġpattern Ref . element Ġ!= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠgetText () Ġ= Ġ" Remove Ġexcess ive Ġpatterns " ĊĊĠĠĠ Ġprivate Ġfun Ġremove Clause s ( clause : ĠAre nd Clause ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġp Parent Ġ= Ġclause . parent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAre nd Constructor Ġ-> Ġp Parent . elim ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp Parent . delete Child Range With Notification ( it , Ġp Parent . last Child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAre nd Function Clause s Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġp Parent . parent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body Ġis ĠAre nd Function Body Ġ|| Ġbody Ġis ĠAre nd Instance Body ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Ġ= Ġbody . prev Sibling ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev Ġis ĠPsi WhiteSpace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev . parent . delete Child Range With Notification ( prev , Ġbody ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . delete With Notification () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( project : ĠProject , Ġeditor : ĠEditor ?, Ġfile : ĠPsi File ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpattern Ġ= Ġpattern Ref . element Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġvar Ġfirst Ġ= Ġpattern . extend Left ĊĠĠĠĠĠĠĠ Ġfirst . prev Sibling ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠLeaf Psi Element Ġ&& Ġit . elementType Ġ== ĠAre nd Element Types . COMMA ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ= Ġit . extend Left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġlast : ĠPsi Element Ġ= Ġpattern ĊĠĠĠĠĠĠĠ Ġif Ġ( single ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast . extend Right . next Sibling ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠLeaf Psi Element Ġ&& Ġit . elementType Ġ== ĠAre nd Element Types . COMMA ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġneed Ġto Ġremove Ġall Ġpatterns , Ġjust Ġremove Ġall Ġclauses ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first . prev Sibling . let Ġ{ Ġit Ġ== Ġnull Ġ|| Ġit Ġis ĠLeaf Psi Element Ġ&& Ġit . elementType Ġ== ĠAre nd Element Types . PIPE Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġparent Ġ= Ġfirst . parent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAre nd Clause Ġ-> Ġremove Clause s ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAre nd Constructor Clause Ġ-> Ġ( parent . parent Ġas ? ĠAre nd Data Body )?. delete With Notification () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRemove Ġeverything Ġtill Ġthe Ġnext Ġ' => ', Ġ' )', Ġ' }', Ġor Ġ'\ as ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġlast . next Sibling ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Ġ== Ġnull Ġ|| Ġnext Ġis ĠLeaf Psi Element Ġ&& Ġnext . elementType Ġin ĠlistOf ( Are nd Element Types . FAT _ ARROW , ĠAre nd Element Types . RP AREN , ĠAre nd Element Types . R BRACE , ĠAre nd Element Types . AS _ KW )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Ġ= Ġnext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠKeep Ġwh ites p aces Ġand Ġcomments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Ġis ĠPsi WhiteSpace Ġ|| Ġlast Ġis ĠPsi Comment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Ġ= Ġlast . extend Left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast . prev Sibling ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġa Ġwhitespace Ġbefore Ġ' =>' Ġor Ġ'\ as ' ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġfirst . parent ĊĠĠĠĠĠĠĠ Ġif Ġ( last . nextElement . let Ġ{ Ġit Ġis ĠLeaf Psi Element Ġ&& Ġit . elementType Ġin ĠlistOf ( Are nd Element Types . FAT _ ARROW , ĠAre nd Element Types . AS _ KW ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent . add After With Notification ( Are nd Psi Factory ( parent . project ). create Whitespace (" Ġ"), Ġlast ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġparent . delete Child Range With Notification ( first , Ġlast ) ĊĠĠĠ Ġ} Ċ } Ċ