package Ġorg . jetbrains . fortran . ide . actions Ċ Ċ import Ġcom . intellij . code Insight . File Modification Service Ċ import Ġcom . intellij . openapi . action System . An Action Ċ import Ġcom . intellij . openapi . action System . An ActionEvent Ċ import Ġcom . intellij . openapi . action System . Common Data Keys Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . vfs . V fs Util Core Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . openapi . vfs . Virtual File Visitor Ċ import Ġcom . intellij . psi . Psi Comment Ċ import Ġcom . intellij . psi . Psi Document Manager Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . Psi Manager Ċ import Ġcom . intellij . psi . impl . file . Psi File Impl Util Ċ import Ġcom . intellij . psi . impl . source . code Style . Code Style ManagerImpl Ċ import Ġcom . intellij . psi . util . Psi Tree Util Ċ import Ġorg . jetbrains . fortran . For tran FileType Ċ import Ġorg . jetbrains . fortran . ide . util . execute Write Command Ċ import Ġorg . jetbrains . fortran . lang . psi . For tran Fixed Form File Ċ import Ġorg . jetbrains . fortran . lang . psi . For tran TokenType Ċ Ċ class ĠFor tran Fixed Form Converter Action Ġ: ĠAn Action (" Convert Ġto ĠFree ĠForm ĠSource ") Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠactionPerformed ( event : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= Ġselected For tran Fixed Form Files ( event ). filter Ġ{ Ġit . is Writable Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠCommon Data Keys . PROJECT . getData ( event . data Context ) !! ĊĊĠĠĠĠĠĠĠ Ġproject . execute Write Command (" Convert Ġfiles Ġfrom Ġfixed Ġto Ġfree Ġform ", Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiles . forEach Ġ{ Ġfile Ġ-> ĠFor tran File Converter . convert File ( project , Ġfile ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselected For tran Fixed Form Files ( e : ĠAn ActionEvent ): ĠSequence < For tran Fixed Form File > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvirtual Files Ġ= Ġe . getData ( Common Data Keys . VIRTUAL _ FILE _ ARRAY ) Ġ?: Ġreturn Ġsequence Of () ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġe . project Ġ?: Ġreturn Ġsequence Of () ĊĠĠĠĠĠĠĠ Ġreturn Ġall For tran Fixed Form Files ( virtual Files , Ġproject ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġall For tran Fixed Form Files ( files Or Dirs : ĠArray < Virtual File >, Ġproject : ĠProject ): ĠSequence < For tran Fixed Form File > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= ĠPsi Manager . getInstance ( project ) ĊĠĠĠĠĠĠĠ Ġreturn Ġall Files ( files Or Dirs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġmanager . find File ( it ) Ġas ? ĠFor tran Fixed Form File Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġall Files ( files Or Dirs : ĠArray < Virtual File >): ĠCollection < Virtual File > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArrayList < Virtual File >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( file Ġin Ġfiles Or Dirs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV fs Util Core . visit Children Re cursively ( file , Ġobject Ġ: ĠVirtual File Visitor < Unit >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit File ( file : ĠVirtual File ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠFor tran File Converter Ġ{ ĊĠĠĠ Ġfun Ġconvert File ( project : ĠProject , Ġfile : ĠPsi File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! File Modification Service . getInstance (). prepare Psi Element For Write ( file )) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠPsi Document Manager . getInstance ( project ). getDocument ( file ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġdocument . setText ( convert File ( document . chars Sequence , Ġfile )) ĊĠĠĠĠĠĠĠ Ġval Ġnew FileName Ġ= Ġfile . name . substring Before Last ('.') Ġ+ Ġ"." Ġ+ ĠFor tran FileType . default Extension ĊĠĠĠĠĠĠĠ Ġval Ġnew File Ġ= ĠPsi File Impl Util . setName ( file , Ġnew FileName ) ĊĠĠĠĠĠĠĠ ĠPsi Document Manager . getInstance ( project ). commit All Documents () ĊĠĠĠĠĠĠĠ ĠCode Style ManagerImpl ( project ). re format Text ( new File , Ġ 0 , Ġnew File . text Length ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert File ( file Content : ĠCharSequence , Ġfile : ĠPsi File ): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( file Content . isEmpty ()) Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġreturn ĠStringBuilder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġposition In Fixed Form Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPsi Tree Util . find Children OfType ( file , ĠPsi Comment :: class . java ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition In Fixed Form Ġ= Ġif Ġ( it . token Type Ġ== ĠFor tran TokenType . LINE _ COMMENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( file Content . sub Sequence ( position In Fixed Form , Ġit . text Offset )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . text Offset Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Sibling Ġ= Ġit . prev Sibling ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev Sibling Ġis ĠPsi Comment Ġ&& Ġprev Sibling . token Type Ġ== ĠFor tran TokenType . LINE _ COMMENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinsert ( length Ġ- Ġ 1 , Ġ"& ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( file Content . sub Sequence ( position In Fixed Form , Ġit . text Offset )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( file Content . sub Sequence ( position In Fixed Form , Ġit . text Offset )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("& \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . text Range . end Offset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( file Content . sub Sequence ( position In Fixed Form , Ġfile Content . length )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ