package Ġio . kot est . plugin . intellij . intent ions Ċ Ċ import Ġcom . intellij . code Insight . int ention . Psi Element Base Int ention Action Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . util . Text Range Ċ import Ġcom . intellij . psi . Psi Document Manager Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġio . kot est . plugin . intellij . psi . is Cont ained In Spec Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . psi . Kt File Ċ import Ġorg . jetbrains . kotlin . psi . Kt Psi Factory Ċ import Ġorg . jetbrains . kotlin . resolve . Import Path Ċ Ċ abstract Ġclass ĠSur round Selection With Function Int ention Ġ: ĠPsi Element Base Int ention Action () Ġ{ ĊĊĠĠ Ġoverride Ġfun Ġis Available ( project : ĠProject , Ġeditor : ĠEditor ?, Ġelement : ĠPsi Element ): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠ Ġeditor ?. selection Model ?. has Selection () Ġ== Ġtrue Ġ&& Ġelement . is Cont ained In Spec () ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} ĊĊĠĠ Ġabstract Ġval Ġimport FQ N : ĠF q Name ĊĠĠ Ġabstract Ġval Ġfunction : ĠString ĊĊĠĠ Ġoverride Ġfun Ġinvoke ( project : ĠProject , Ġeditor : ĠEditor ?, Ġelement : ĠPsi Element ) Ġ{ ĊĊĠĠĠĠĠ Ġval Ġdoc Manager Ġ= ĠPsi Document Manager . getInstance ( project ) ĊĠĠĠĠĠ Ġval Ġk tf actory Ġ= ĠK t Psi Factory ( project ) ĊĊĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠ Ġval Ġselection Ġ= Ġeditor ?. selection Model ĊĠĠĠĠĠ Ġif Ġ( selection ?. has Selection () Ġ== Ġtrue ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġelement . containing File ĊĠĠĠĠĠĠĠ Ġif Ġ( file Ġis ĠK t File ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠ Ġval Ġline 1 Ġ= Ġeditor . document . get LineNumber ( selection . selection Start ) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġlin en Ġ= Ġeditor . document . get LineNumber ( selection . selection End ) ĊĊĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġour Ġend Ġposition Ġis Ġcolumn Ġ 0 , Ġthen Ġwe 've Ġselected Ġa Ġfull Ġline Ġ- Ġint ellij Ġwraps Ġthis Ġonto Ġthe Ġnext Ġline Ġfor Ġsome Ġreason ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġval Ġline N 0 Ġ= Ġif Ġ( selection . selection End Position ?. column Ġ== Ġ 0 ) Ġlin en Ġ- Ġ 1 Ġelse Ġlin en ĊĊĠĠĠĠĠĠĠĠĠ Ġ// Ġexpand Ġthe Ġtext Ġrange Ġto Ġinclude Ġthe Ġfull Ġlines Ġof Ġthe Ġselection ĊĠĠĠĠĠĠĠĠĠ Ġval Ġline Start Ġ= Ġeditor . document . getLine Start Offset ( line 1 ) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġline End Ġ= Ġeditor . document . getLine End Offset ( lin en ) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġline Range Ġ= ĠText Range ( line Start , Ġline End ) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġeditor . document . getText ( line Range ) ĊĊĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġneed Ġto Ġwork Ġout Ġhow Ġindent ed Ġthe Ġfirst Ġline Ġwas , Ġso Ġwe Ġcan Ġident Ġthe Ġfunction Ġname Ġthe Ġsame Ġamount ĊĠĠĠĠĠĠĠĠĠ Ġval Ġwhitespace Prefix Ġ= Ġtext . take While Ġ{ Ġit . is Whitespace () Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġ// Ġpad Ġeach Ġof Ġthe Ġoriginal Ġlines Ġto Ġinclude Ġsome Ġextra Ġpadding Ġas Ġit Ġwill Ġbe Ġfurther Ġindent ed ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġ 4 Ġspaces Ġseems Ġto Ġbe Ġwhat Ġmost Ġkotlin Ġfiles Ġuse Ġbut ĠI Ġlike Ġ 2 Ġ:) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġpadded Statements Ġ= Ġtext . split ('\ n '). join ToString ("\ n ") Ġ{ Ġ" Ġ Ġ$ it " Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġ// Ġcreate Ġa Ġnew Ġstring Ġcontaining Ġthe Ġwrapping Ġfunction Ġand Ġthe Ġnow - padded Ġoriginal Ġstatements ĊĠĠĠĠĠĠĠĠĠ Ġval Ġwrapped Ġ= Ġ"$ whitespace Prefix $ function Ġ{\ n $ padded Statements \ n $ whitespace Prefix }" ĊĊĠĠĠĠĠĠĠĠĠ Ġ// Ġplace Ġthe Ġnew Ġblock Ġat Ġthe Ġposition Ġof Ġthe Ġoriginal Ġlines ĊĠĠĠĠĠĠĠĠĠ Ġeditor . document . replace String ( line Start , Ġline End , Ġwrapped ) ĊĠĠĠĠĠĠĠĠĠ Ġdoc Manager . commit Document ( editor . document ) ĊĊĠĠĠĠĠĠĠĠĠ Ġ// Ġbest Ġadd Ġthe Ġimport Ġif Ġneeded Ġfor Ġthe Ġfunction ĊĠĠĠĠĠĠĠĠĠ Ġval Ġimport Path Ġ= ĠImport Path ( import FQ N , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġfile . import List ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list . imports . none Ġ{ Ġit . import Path Ġ== Ġimport Path Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimp Ġ= Ġk tf actory . create Import Directive ( import Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( imp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġdoc Manager . do Post p oned Operations And Un block Document ( editor . document ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ