package Ġcom . bloc . intellij _ generator _ plugin . action Ċ Ċ import Ġcom . bloc . intellij _ generator _ plugin . generator . Bloc Generator Factory Ċ import Ġcom . bloc . intellij _ generator _ plugin . generator . Abs Interactor Generator Ċ import Ġcom . intellij . lang . java . Java Language Ċ import Ġcom . intellij . openapi . action System .* Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . command . Command Processor Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . psi .* Ċ import Ġcom . intellij . psi . impl . file . Psi Directory Factory Ċ Ċ class ĠGenerate Bloc Action Ġ: ĠAn Action (), ĠGenerate Bloc Dialog . Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdata Context : ĠData Context ĊĊĠĠĠ Ġoverride Ġfun ĠactionPerformed ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠGenerate Bloc Dialog ( this ) ĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Generate Bloc Clicked ( bloc Name : ĠString ?, Ġshould Use Equ atable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġb loc Name ?. let Ġ{ Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgenerators Ġ= ĠB loc Generator Factory . getB loc Generators ( name , Ġshould Use Equ atable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate ( generators , Ġname ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . data Context . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data Context Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpresentation Ġ= Ġe . presentation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresentation . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġgenerate ( main Source Generators : ĠList < Abs Interactor Generator >, Ġname : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠCommon Data Keys . PROJECT . getData ( data Context ) ĊĊĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). run Write Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġproject !!. base Dir . find Child (" lib ") !!. find Child (" domain ") !!. find Child (" inter actor ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Child Directory ( null , Ġmain Source Generators . first (). snake Case ()) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirectory Ġ= ĠPsi Directory Factory . getInstance ( project ). create Directory ( path ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdi File Ġ= Ġproject !!. base Dir . find Child (" lib ") !!. find Child (" domain ") !!. find Child (" di ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Child (" inject _ dependencies . dart ") !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCommand Processor . getInstance (). execute Command ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Source Generators . forEach Ġ{ Ġcreate SourceFile ( project , Ġit , Ġdirectory ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodify Inject Dependencies ( project , Ġmain Source Generators , Ġdi File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Generate Ġa Ġnew Ġinter actor ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate SourceFile ( project : ĠProject , Ġgenerator : ĠAbs Interactor Generator , Ġdirectory : ĠPsi Directory ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġgenerator . fileName () ĊĠĠĠĠĠĠĠ Ġval Ġexisting Psi File Ġ= Ġdirectory . find File ( fileName ) ĊĠĠĠĠĠĠĠ Ġif Ġ( existing Psi File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠPsi Document Manager . getInstance ( project ). getDocument ( existing Psi File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument ?. insert String ( document . text Length , Ġ"\ n " Ġ+ Ġgenerator . generate ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpsi File Ġ= ĠPsi File Factory . getInstance ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create File FromText ( fileName , ĠJava Language . INSTANCE , Ġgenerator . generate ()) ĊĠĠĠĠĠĠĠ Ġdirectory . add ( psi File ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmodify Inject Dependencies ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġgenerators : ĠList < Abs Interactor Generator >, ĊĠĠĠĠĠĠĠ Ġdi File : ĠVirtual File ĊĠĠĠ Ġ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġdi File . ĊĠĠĠĠĠĠĠ Ġval Ġpsi File Ġ= ĠPsi Manager . getInstance ( project ). find File ( di File ) !! ĊĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠPsi Document Manager . getInstance ( project ). getDocument ( psi File ) !! ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġdocument . text Ċ // ĠĠĠĠĠĠĠ Ġdocument ?. insert String ( document . text Length , Ġ"\ n " Ġ+ Ġgenerator . generate ()) ĊĠĠĠĠĠĠĠ Ġval Ġclosing Offset Ġ= Ġtext . indexOf Last Ġ{ Ġit Ġ== Ġ' }' Ġ} ĊĊĠĠĠĠĠĠĠ Ġdocument . insert String ( closing Offset , Ġ"\ n " Ġ+ Ġgenerators . first (). generate Injection Line ()) ĊĠĠĠĠĠĠĠ Ġdocument . insert String ( 0 , Ġgenerators . first (). generate Import Line ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġreturn Ċ Ċ // ĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġgenerator . fileName () Ċ // ĠĠĠĠĠĠĠ Ġval Ġexisting Psi File Ġ= Ġdirectory . find File ( fileName ) Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( existing Psi File Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠPsi Document Manager . getInstance ( project ). getDocument ( existing Psi File ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdocument ?. insert String ( document . text Length , Ġ"\ n " Ġ+ Ġgenerator . generate ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġval Ġpsi File Ġ= ĠPsi File Factory . getInstance ( project ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. create File FromText ( fileName , ĠJava Language . INSTANCE , Ġgenerator . generate ()) Ċ // ĠĠĠĠĠĠĠ Ġdirectory . add ( psi File ) ĊĠĠĠ Ġ} Ċ }