package Ġio . github . intellij . d language . actions Ċ Ċ import Ġcom . intellij . execution . ExecutionException Ċ import Ġcom . intellij . execution . configurations . General CommandLine Ċ import Ġcom . intellij . execution . process . OS Process Handler Ċ import Ġcom . intellij . execution . process . Process Adapter Ċ import Ġcom . intellij . execution . process . Process Event Ċ import Ġcom . intellij . notification . Notification Ċ import Ġcom . intellij . notification . Notification Type Ċ import Ġcom . intellij . notification . Notifications Ċ import Ġcom . intellij . openapi . action System . An Action Ċ import Ġcom . intellij . openapi . action System . An ActionEvent Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . application . Modal ity State Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . module . Module Ċ import Ġcom . intellij . openapi . module . Module Manager Ċ import Ġcom . intellij . openapi . progress . Progress Indicator Ċ import Ġcom . intellij . openapi . progress . Progress Manager Ċ import Ġcom . intellij . openapi . progress . Task Ċ import Ġcom . intellij . openapi . progress . impl . Background able Process Indicator Ċ import Ġcom . intellij . openapi . project . D umb Aware Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . roots . Library Order Entry Ċ import Ġcom . intellij . openapi . roots . Mod ifiable Models Provider Ċ import Ġcom . intellij . openapi . roots . Module Root Modification Util Ċ import Ġcom . intellij . openapi . roots . Order Root Type Ċ import Ġcom . intellij . openapi . roots . impl . Order Entry Util Ċ import Ġcom . intellij . openapi . roots . libraries . Library Tables Registrar Ċ import Ġcom . intellij . openapi . ui . popup . JB Popup Factory Ċ import Ġcom . intellij . openapi . util . Key Ċ import Ġcom . intellij . openapi . util . System Info Ċ import Ġcom . intellij . openapi . vfs . Local FileSystem Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . openapi . vfs . Virtual FileManager Ċ import Ġcom . intellij . ui . components . JB List Ċ import Ġio . github . intellij . d language . icons . D lang Icons Ċ import Ġio . github . intellij . d language . module . D lang Module Type Ċ import Ġio . github . intellij . d language . project . D ub Configuration Parser Ċ import Ġio . github . intellij . d language . project . D ub Package Ċ import Ġio . github . intellij . d language . settings . Tool Key Ċ import Ġio . github . intellij . d language . utils . D Tools Notification Listener Ċ import Ġorg . jetbrains . annotations . NotNull Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġport ed Ġfrom ĠJava Ġon Ġ 0 6 / 0 2 / 1 8 Ċ Ġ* Ċ Ġ* Ġtodo : Ġthis Ġclass Ġneeds Ġa Ġre think . ĠIt 's Ġcurrently Ġtied Ġto Ġthe Ġuser Ġhaving Ġd ub Ġconfigured . ĠAlso , Ġthe ĠAction Ġshouldn 't Ċ Ġ* Ġneed Ġto Ġbe Ġcalled Ġmanually . ĠFor Ġd ub Ġprojects Ġwe Ġshould Ġscan Ġd ub . json / sdl Ġfor Ġchanges Ġor Ġwhen Ġopening / import ing Ċ Ġ* Ġa Ġproject Ġ( The Ġsame Ġway Ġthat Ġthe ĠMaven / Gradle Ġintegration Ġworks ) Ġand Ġwhen Ġnot Ġusing Ġd ub Ġwe Ġshould Ġjust Ċ Ġ* Ġdetect Ġwhen Ġthe Ġuser Ġadds / re moves Ġa Ġlibrary . Ċ Ġ*/ Ċ class ĠProcess DL ib s Ġ: ĠAn Action (" Process ĠD ĠLibraries ", Ġ" Processes Ġthe ĠD ĠLibraries ", ĠD lang Icons . SDK ), ĠD umb Aware Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠactionPerformed ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġe . project ĊĠĠĠĠĠĠĠ Ġif Ġ( project Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Error ( e , Ġ" Unable Ġto Ġprocess ĠD Ġlibraries Ġ- ĠNo Ġactive Ġproject .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmodules Ġ= ĠD lang Module Type . find Modules ( project ) ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġmodules . size ĊĠĠĠĠĠĠĠ Ġwhen Ġ( size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġdisplay Error ( e , Ġ" Unable Ġto Ġprocess ĠD Ġlibraries Ġ- ĠNo ĠD Language Ġmodules Ġare Ġused Ġin Ġthis Ġproject .") ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġprocess DL ib s ( project , Ġmodules . iterator (). next ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġshow Module Choice Popup ( e , Ġproject , Ġmodules ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . presentation . isEnabled Ġ= Ġenabled ( e ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOG Ġ= ĠLogger . getInstance ( Process DL ib s :: class . java ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠMENU _ PATH Ġ= Ġ" Tools Ġ> ĠProcess ĠD ĠLibraries " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠNOT IFICATION _ GROUP ID Ġ= Ġ" Process ĠD ĠLib s " ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġd ub Path Al read Warn ed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġmethod Ġis Ġused Ġfrom Ġvarious Ġplaces , Ġwhen Ġre - working Ġthe Ġway Ġlibs Ġare Ġprocessed Ġthis Ġshould Ġbe Ġmarked ĊĠĠĠĠĠĠĠĠ Ġ* Ġas Ġdeprecated Ġand Ġdeleted Ġin Ġa Ġfuture Ġrelease ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġprocess DL ib s ( project : ĠProject , Ġmodule : ĠModule , Ġmostly Sil ent Mode : ĠBoolean , Ġbuild Before : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). invoke And Wait ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġobject Ġ: ĠTask . Background able ( project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Updating ĠD ub ĠLibraries ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun ( indicator : ĠProgress Indicator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess DL ib s Impl ( project , Ġmodule , Ġmostly Sil ent Mode , Ġbuild Before ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProgress Manager . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run Process With Progress As ynchronously ( task , ĠBackground able Process Indicator ( task )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠMod ality State . default Modal ity State ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġprocess DL ib s Impl ( project : ĠProject , Ġmodule : ĠModule , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmostly Sil ent Mode : ĠBoolean , Ġbuild Before : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// todo Ġneeds Ġbuild / fetch Ġbefore Ġadding Ġlibs , Ġalso Ġneeds Ġto Ġkeep Ġtrack Ġof Ġlibs ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġremove Ġall Ġexisting Ġlibs ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModule Root Modification Util . update Model ( module ) Ġ{ Ġmodel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . order Entries ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < Library Order Entry >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . library ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . module Library Table . remove Library ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . remove Order Entry ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġremove DL ib s ( module , Ġproject );// this Ġis Ġnot Ġnecessary Ġsince Ġint ellij Ġfilters Ġout Ġduplicate Ġlibraries . ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġask Ġd ub Ġfor Ġrequired Ġlibs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd ub Path Ġ= ĠTool Key . D UB _ KEY . path ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// final ĠString ĠgroupId Ġ= Ġe . get Presentation (). getText (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dub Path Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! this . dub Path Al read Warn ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotifications . Bus . notify ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification ( NOTIFICATION _ GROUP ID , Ġ" Process ĠD ĠLibraries ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" D UB Ġexecutable Ġpath Ġis Ġempty < br />< a Ġhref =' configure DL anguage Tools '> Configure </ a >", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Type . WARNING , ĠD Tools Notification Listener ( project )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dub Path Al read Warn ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd ub Parser Ġ= ĠD ub Configuration Parser ( project , Ġd ub Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmostly Sil ent Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dub Parser . can Use D ub ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdependencies Ġ= Ġd ub Parser . dub Package Dependencies ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( pkg Ġin Ġdependencies ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfullName Ġ= Ġpkg . name Ġ+ Ġ"-" Ġ+ Ġpkg . version ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Library Dependency ( module , Ġproject , ĠfullName , Ġpkg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . info (" not Ġpossible Ġto Ġrun Ġ' dub Ġdescribe '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! most ly Sil ent Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotifications . Bus . notify ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification ( NOTIFICATION _ GROUP ID , Ġ" Process ĠD ĠLibraries ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Added Ġyour Ġd ub Ġdependency Ġlibraries ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Type . INFORMATION , ĠD Tools Notification Listener ( project )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġenabled ( e : ĠAn ActionEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠAn Action . getEvent Project ( e ) Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd ub Path Ġ= ĠTool Key . D UB _ KEY . path Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġd ub Path . isNotEmpty () Ġ&& ĠD lang Module Type . find Modules ( project ). isNotEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġshow Module Choice Popup ( e : ĠAn ActionEvent , Ġproject : ĠProject , Ġmodules : ĠCollection < Module >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠJ B List ( JB List . create Default ListModel < Module >(* modules . to Typed Array ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpopup Ġ= ĠJ B Popup Factory . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create List Popup Builder ( list ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Process ĠD Ġlibraries Ġfor Ġmodule ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setItem Cho osen Callback Ġ{ Ġprocess DL ib s ( An Action . getEvent Project ( e ), Ġlist . selected Value Ġas ĠModule ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Popup () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup . show Center ed In Current Window ( project ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġprocess DL ib s ( project : ĠProject ?, Ġmodule : ĠModule ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( project Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . warn (" Unable Ġto Ġprocess ĠD Ġlibraries Ġ- ĠNo Ġactive ĠD Ġproject .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// display Error ( project , Ġ" Unable Ġto Ġprocess ĠD Ġlibraries Ġ- ĠNo Ġactive ĠD Ġproject ."); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess DL ib s ( project , Ġmodule , Ġfalse , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Library Dependency ( module : ĠModule , Ġproject : ĠProject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Name : ĠString , Ġd ub Package : ĠD ub Package ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsources Ġ= Ġget Sources Virtual File ( dub Package ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Library Table Ġ= ĠLibrary Tables Registrar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Library Table ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Library Model Ġ= Ġproject Library Table ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. modifiable Model ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Ġ= Ġproject Library Model . create Library ( library Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Model Ġ= Ġlibrary . modifiable Model ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sources Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Model . add Root ( sources , ĠOrder Root Type . CLASSES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// todo Ġadd Ġbinary Ġlibs / dub . json Ġas Ġwell ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Manager . getApplication () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. invoke And Wait Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). run Write Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Model . commit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Library Model . commit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( project Module Ġin ĠModule Manager . getInstance ( project ). modules ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModule Root Modification Util . add Dependency ( project Module , Ġlibrary ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġtodo : ĠThis Ġmethod Ġneeds Ġbreaking Ġdown . ĠAlso , Ġa Ġd ub Ġpackage Ġcan Ġhave Ġmultiple Ġsource Ġdirectories ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Sources Virtual File ( dub Package : ĠD ub Package ): ĠVirtual File ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfor Ġnow ĠI 'm Ġputting Ġthis Ġhide ous Ġkl udge Ġin Ġwhich Ġmakes Ġit Ġwork Ġthey Ġway Ġit Ġalways Ġhas ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsrc Dir Ġ= Ġif ( dub Package . sources Dirs . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( dub Package . sources Dirs . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . warn (" it 's Ġlikely Ġthat Ġwe 're Ġnot Ġprocessing Ġ${ dub Package . name } Ġcorrectly . Ġ${ dub Package . sources Dirs . size } Ġsource Ġfolders Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd ub Package . sources Dirs [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ" source " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsources Path Url Ġ= Ġif Ġ( System Info . is Windows ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVirtual FileManager . construct Url ( Local FileSystem . PROTOCOL , Ġd ub Package . path Ġ+ Ġsrc Dir . replace ("/", Ġ"\ \" )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVirtual FileManager . construct Url ( Local FileSystem . PROTOCOL , Ġd ub Package . path Ġ+ Ġsrc Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVirtual FileManager . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. refresh And Find File By Url ( sources Path Url ) Ġ?: Ġreturn Ġthis . dub Fetch ( dub Package , Ġsources Path Url ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġd ub Fetch ( dub Package : ĠD ub Package , Ġsources Path Url : Ġ@ NotNull ĠString ): ĠVirtual File ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . info (" sources Ġnot Ġfound , Ġfetching Ġthem ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand Line Ġ= ĠGeneral CommandLine () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd ub Binary Path Ġ= ĠTool Key . D UB _ KEY . path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dub Binary Path Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . error (" dub Ġexecutable Ġshould Ġbe Ġconfigured ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Line . exe Path Ġ= Ġd ub Binary Path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparameters List Ġ= Ġcommand Line . parameters List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters List . add Parameters String (" fetch ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġadd Ġsome Ġlogic Ġhere Ġto Ġchoose Ġbetween Ġ" dub Ġfetch Ġ< package > Ġ-- version = x . y . z " Ġand Ġ" dub Ġfetch Ġ< package >@ x . y . z " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsee : Ġhttps :// github . com / d lang / dub / issues / 2 0 2 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġd ub Ġis Ġversion Ġ 1 . 2 3 Ġor Ġover : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters List . add Parameters String ("${ dub Package . name }@ ${ dub Package . version }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġelse Ġuse Ġold Ġsyntax : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġparameters List . add Parameters String ( dub Package . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġparameters List . add Parameters String ("-- version =${ dub Package . version }") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd ub Command Ġ= Ġcommand Line . command Line String ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocess : ĠOS Process Handler ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Ġ= ĠOS Process Handler ( command Line . create Process (), Ġd ub Command ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠExecution Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerrors Ġ= ĠArrayList < String >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess . add Process Listener ( object Ġ: ĠProcess Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Text Available ( event : ĠProcess Event , Ġoutput Type : ĠKey <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( output Type . toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stdout " Ġ-> Ġbuilder . append ( event . text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" stderr " Ġ-> Ġerrors . add ( event . text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess . start Notify () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess . waitFor () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . debug (" output Ġfrom Ġfetching Ġpackage :" Ġ+ Ġbuilder . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( error Ġin Ġerrors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . error ( String . format (" Error Ġwhen Ġrunning Ġ'% s ' Ġ: Ġ% s ", Ġd ub Command , Ġerror )); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexit Code Ġ= Ġprocess . exit Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exit Code Ġ!= Ġnull Ġ&& Ġexit Code Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// try Ġloading Ġagain ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVirtual FileManager . getInstance (). refresh And Find File By Url ( sources Path Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . error (" exit code Ġwas Ġno Ġzero Ġfor Ġfetching Ġpackage ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġprivate Ġfun Ġremove DL ib s ( module : ĠModule , Ġproject : ĠProject ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġproject Library Table Ġ= ĠLibrary Tables Registrar . getInstance () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Library Table ( project ) Ċ // ĠĠĠĠĠĠĠ Ġfor Ġ( lib Ġin Ġproject Library Table . libraries ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġremove Library IfNeeded ( module , Ġlib . name ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġremove Library IfNeeded ( module : ĠModule , Ġlibrary Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). assertIs Dispatch Thread () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodels Provider Ġ= ĠMod ifiable Models Provider . SERVICE . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodel Ġ= Ġmodels Provider . getModule Mod ifiable Model ( module ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Library Entry Ġ= ĠOrder Entry Util . find Library Order Entry ( model , Ġlibrary Name !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( d Library Entry Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). run Write Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Ġ= Ġd Library Entry . library ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( library Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Ġ= Ġlibrary . table ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( table Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable . remove Library ( library ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . remove Order Entry ( d Library Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodels Provider . commit Module Mod ifiable Model ( model ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodels Provider . dispose Module Mod ifiable Model ( model ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Manager . getApplication () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run Write Action Ġ{ Ġmodels Provider . dispose Module Mod ifiable Model ( model ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdisplay Error ( e : ĠAn ActionEvent , Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Error ( An Action . getEvent Project ( e ), Ġmessage ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdisplay Error ( project : ĠProject ?, Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// final ĠString ĠgroupId Ġ= Ġe . get Presentation (). getText (); ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotifications . Bus . notify ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification ( NOTIFICATION _ GROUP ID , Ġ" Process ĠD Ġlibs ", Ġmessage , ĠNotification Type . ERROR ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . warn ( message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ