// ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġorg . jetbrains . idea . maven . utils Ċ Ċ import Ġcom . intellij . execution . w sl . W SL CommandLine Options Ċ import Ġcom . intellij . execution . w sl . W SL Distribution Ċ import Ġcom . intellij . execution . w sl . W sl Path Ċ import Ġcom . intellij . notification . Notification Ċ import Ġcom . intellij . notification . Notification Listener Ċ import Ġcom . intellij . notification . Notification Type Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . application . Write Action Ċ import Ġcom . intellij . openapi . components . service Ċ import Ġcom . intellij . openapi . external System . service . execution . Invalid Sdk Exception Ċ import Ġcom . intellij . openapi . options . Show Settings Util Ċ import Ġcom . intellij . openapi . progress . Progress Indicator Ċ import Ġcom . intellij . openapi . progress . Progress Manager Ċ import Ġcom . intellij . openapi . progress . Task Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . project Roots .* Ċ import Ġcom . intellij . openapi . project Roots . impl . Sdk Configuration Util Ċ import Ġcom . intellij . openapi . project Roots . impl . jdk Downloader . J dk Installer Ċ import Ġcom . intellij . openapi . project Roots . impl . jdk Downloader . J dk List Downloader Ċ import Ġcom . intellij . openapi . project Roots . impl . jdk Downloader . J dk Predicate Ċ import Ġcom . intellij . openapi . roots . Project Root Manager Ċ import Ġcom . intellij . openapi . roots . ex . Project Root Manager Ex Ċ import Ġcom . intellij . openapi . roots . ui . configuration . Project Structure Configurable Ċ import Ġcom . intellij . openapi . util . io . File Util Ċ import Ġcom . intellij . openapi . util . text . StringUtil Ċ import Ġcom . intellij . ui . navigation . Place Ċ import Ġcom . intellij . util . text . Version Comparator Util Ċ import Ġorg . jetbrains . idea . maven . config . Maven Config Ċ import Ġorg . jetbrains . idea . maven . config . Maven Config Settings Ċ import Ġorg . jetbrains . idea . maven . execution . Maven Runner Settings Ċ import Ġorg . jetbrains . idea . maven . execution . Sync Bundle Ċ import Ġorg . jetbrains . idea . maven . project . Maven Project Bundle Ċ import Ġorg . jetbrains . idea . maven . project . Maven Projects Manager Ċ import Ġorg . jetbrains . idea . maven . server . Maven Dist ributions Cache Ċ import Ġorg . jetbrains . idea . maven . server . Maven Server Manager Ċ import Ġorg . jetbrains . idea . maven . server . W sl Maven Distribution Ċ import Ġorg . jetbrains . idea . maven . wiz ards . Maven Project Builder Ċ import Ġjava . io . File Ċ import Ġjava . util . function . Function Ċ import Ġjava . util . function . Supplier Ċ import Ġjavax . swing . event . Hyper link Event Ċ Ċ internal Ġobject ĠMaven W sl Util Ġ: ĠMaven Util () Ġ{ ĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġget W sl J dk ( project : ĠProject , Ġname : ĠString ): ĠS dk Ġ{ ĊĠĠĠ Ġval Ġproject W sl Dist r Ġ= Ġtry Get W sl Distribution ( project ) Ġ?: Ġthrow ĠIllegalStateException (" project Ġ$ project Ġis Ġnot ĠW SL Ġbased "); ĊĠĠĠ Ġif Ġ( name Ġ== ĠMaven Runner Settings . USE _ JAVA _ HOME ) Ġ{ ĊĠĠĠĠĠ Ġval Ġj dk Ġ= Ġproject W sl Dist r . environment [" JAVA _ HOME "] ?. let Ġ{ Ġproject W sl Dist r . get Windows Path ( it ) Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠ ĠJava Sdk . getInstance (). create J dk ("", Ġit ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( jdk Ġ!= Ġnull Ġ&& Ġj dk . sdk Type Ġis ĠJava Sdk Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġj dk ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( name Ġ== ĠMaven Runner Settings . USE _ PROJECT _ JDK ) Ġ{ ĊĠĠĠĠĠ Ġval Ġj dk Ġ= ĠProject Root Manager . getInstance ( project ). project Sdk ĊĠĠĠĠĠ Ġif Ġ( jdk Ġ!= Ġnull Ġ&& Ġj dk . sdk Type Ġis ĠJava Sdk Type Ġ&& Ġproject W sl Dist r Ġ== Ġtry Get W sl Distribution For Path ( jdk . home Path )) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġj dk ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġsdk By Exact Name Ġ= Ġget Sdk By Exact Name ( name ) ĊĠĠĠ Ġif Ġ( sdk By Exact Name Ġ!= Ġnull Ġ&& Ġproject W sl Dist r Ġ== Ġtry Get W sl Distribution For Path ( sdk By Exact Name . home Path )) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġsdk By Exact Name ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠMaven Project Builder . suggest Project Sdk ( project ) Ġ?: Ġthrow ĠInvalid Sdk Exception ( name ) ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġget Properties From Maven Opts ( distribution : ĠW SL Distribution ): ĠMap < String , ĠString > Ġ{ ĊĠĠĠ Ġreturn Ġparse Maven Properties ( distribution . get EnvironmentVariable (" MA VEN _ OPTS ")) ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġget W sl Distribution ( project : ĠProject ): ĠW SL Distribution Ġ{ ĊĠĠĠ Ġval ĠbasePath Ġ= Ġproject . basePath Ġ?: Ġthrow ĠIllegalArgumentException (" Project Ġ$ project Ġwith Ġnull Ġbase Ġpath ") ĊĠĠĠ Ġreturn ĠW sl Path . get Distribution By Windows Un c Path ( basePath ) ĊĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Distribution Ġfor Ġpath Ġ$ basePath Ġnot Ġfound , Ġcheck Ġyour ĠW SL Ġinstallation ") ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġtry Get W sl Distribution ( project : ĠProject ): ĠW SL Distribution ? Ġ{ ĊĠĠĠ Ġreturn Ġproject . basePath ?. let Ġ{ ĠW sl Path . get Distribution By Windows Un c Path ( it ) Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġtry Get W sl Distribution For Path ( path : ĠString ?): ĠW SL Distribution ? Ġ{ ĊĠĠĠ Ġreturn Ġpath ?. let Ġ{ ĠW sl Path . get Distribution By Windows Un c Path ( it )} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġreturn Ġfile Ġin Ġwindows - style Ġ(" \\ w sl $\ dist rib - name \ home \ user \. m 2 \ settings . xml ") ĊĠĠ Ġ*/ ĊĠ Ġ@ Jvm Static ĊĠ Ġfun ĠW SL Distribution . resolve User Settings File ( over ridden User Settings File : ĠString ?): ĠFile Ġ{ ĊĠĠĠ Ġif Ġ( isEmpty Or Spaces ( over ridden User Settings File )) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠFile ( resolve M 2 Dir (), ĠSET T INGS _ XML ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġreturn ĠFile ( over ridden User Settings File ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġreturn Ġfile Ġin Ġwindows - style Ġ(" \\ w sl $\ dist rib - name \ home \ user \. m 2 \ settings . xml ") ĊĠĠ Ġ*/ ĊĠ Ġ@ Jvm Static ĊĠ Ġfun ĠW SL Distribution . resolve Global Settings File ( over ridden Maven Home : ĠString ?): ĠFile ? Ġ{ ĊĠĠĠ Ġval Ġdirectory Ġ= Ġthis . resolve Maven Home Directory ( over ridden Maven Home ) Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġreturn ĠFile ( File ( directory , ĠCONF _ DIR ), ĠSET T INGS _ XML ) ĊĠ Ġ} ĊĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun ĠW SL Distribution . resolve M 2 Dir (): ĠFile Ġ{ ĊĠĠĠ Ġreturn Ġthis . get Windows File ( File ( this . environment [" HOME "], ĠDOT _ M 2 _ DIR )) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġreturn Ġfile Ġin Ġwindows - style Ġ(" \\ w sl $\ dist rib - name \ home \ user \. m 2 \ settings . xml ") ĊĠĠ Ġ*/ ĊĠ Ġ@ Jvm Static ĊĠ Ġfun ĠW SL Distribution . resolve Maven Home Directory ( override Maven Home : ĠString ?): ĠFile ? Ġ{ ĊĠĠĠ ĠMaven Log . LOG . debug (" res olving Ġmaven Ġhome Ġon ĠW SL Ġwith Ġoverride Ġ= Ġ\" ${ override Maven Home }\" ") ĊĠĠĠ Ġif Ġ( override Maven Home Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( override Maven Home Ġ== ĠMaven Server Manager . B UND LED _ MA VEN _ 3 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMaven Dist ributions Cache . resolve Embedded Maven Home (). maven Home ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġhome Ġ= ĠFile ( override Maven Home ) ĊĠĠĠĠĠ Ġif Ġ( isValid Maven Home ( home )) Ġ{ ĊĠĠĠĠĠĠĠ ĠMaven Log . LOG . debug (" resolved Ġmaven Ġhome Ġas Ġ${ override Maven Home }") ĊĠĠĠĠĠĠĠ Ġreturn Ġhome ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠMaven Log . LOG . debug (" Maven Ġhome Ġ${ override Maven Home } Ġon ĠW SL Ġis Ġinvalid ") ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġm 2 home Ġ= Ġthis . environment [ ENV _ M 2 _ HOME ] ĊĠĠĠ Ġif Ġ( m 2 home Ġ!= Ġnull Ġ&& Ġ! isEmpty Or Spaces ( m 2 home )) Ġ{ ĊĠĠĠĠĠ Ġval Ġhome From Env Ġ= Ġthis . get Windows Path ( m 2 home )?. let (:: File ) ĊĠĠĠĠĠ Ġif Ġ( isValid Maven Home ( home From Env )) Ġ{ ĊĠĠĠĠĠĠĠ ĠMaven Log . LOG . debug (" resolved Ġmaven Ġhome Ġusing Ġ\$ M 2 _ HOME Ġas Ġ${ home From Env }") ĊĠĠĠĠĠĠĠ Ġreturn Ġhome From Env ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠMaven Log . LOG . debug (" Maven Ġhome Ġusing Ġ\$ M 2 _ HOME Ġis Ġinvalid ") ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġvar Ġhome Ġ= Ġthis . get Windows Path ("/ usr / share / maven ") ?. let (:: File ) ĊĠĠĠ Ġif Ġ( isValid Maven Home ( home )) Ġ{ ĊĠĠĠĠĠ ĠMaven Log . LOG . debug (" Maven Ġhome Ġfound Ġat Ġ/ usr / share / maven ") ĊĠĠĠĠĠ Ġreturn Ġhome ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġhome Ġ= Ġthis . get Windows Path ("/ usr / share / maven 2 ") ?. let (:: File ) ĊĠĠĠ Ġif Ġ( isValid Maven Home ( home )) Ġ{ ĊĠĠĠĠĠ ĠMaven Log . LOG . debug (" Maven Ġhome Ġfound Ġat Ġ/ usr / share / maven 2 ") ĊĠĠĠĠĠ Ġreturn Ġhome ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġoptions Ġ= ĠW SL CommandLine Options () ĊĠĠĠĠĠ Ġ. set ExecuteCommand In Login Shell ( true ) ĊĠĠĠĠĠ Ġ. set Shell Path ( this . shell Path ) ĊĠĠĠ Ġval Ġprocess Output Ġ= Ġthis . execute On W sl ( listOf (" which ", Ġ" mvn "), Ġoptions , Ġ 1 0 0 0 0 , Ġnull ) ĊĠĠĠ Ġif Ġ( process Output . exit Code Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġval Ġpath Ġ= Ġprocess Output . stdout . lines (). find Ġ{ Ġit . isNotEmpty () Ġ} ?. let ( this :: resolve S ymlink )?. let ( this :: get Windows Path )?. let (:: File ) ĊĠĠĠĠĠ Ġif Ġ( path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpath ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠĠĠ ĠMaven Log . LOG . debug (" mvn Ġnot Ġfound Ġin Ġ\$ PATH ") ĊĊĠĠĠ ĠMaven Log . LOG . debug (" Maven Ġhome Ġnot Ġfound Ġon Ġ${ this . present able Name }") ĊĠĠĠ Ġreturn Ġnull ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġreturn Ġfile Ġin Ġwindows Ġstyle ĊĠĠ Ġ*/ ĊĠ Ġ@ Jvm Static ĊĠ Ġfun ĠW SL Distribution . resolve Local Repository ( over ridden Local Repository : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverridden Maven Home : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverridden User Settings File : ĠString ?): ĠFile Ġ{ ĊĠĠĠ Ġif Ġ( over ridden Local Repository Ġ!= Ġnull Ġ&& Ġ! isEmpty Or Spaces ( over ridden Local Repository )) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠFile ( over ridden Local Repository ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdo Resolve Local Repository ( this . resolve User Settings File ( over ridden User Settings File ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . resolve Global Settings File ( over ridden Maven Home )) ?. let Ġ{ Ġthis . get Windows File ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠFile ( this . resolve M 2 Dir (), ĠRE POSITORY _ DIR ) ĊĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġinternal Ġfun ĠW SL Distribution . getDefault Maven Distribution ( over ridden Maven Home : ĠString ? Ġ= Ġnull ): ĠW sl Maven Distribution ? Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= Ġthis . resolve Maven Home Directory ( over ridden Maven Home ) Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġval Ġw sl File Ġ= Ġthis . get W sl Path ( file . path ) Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġreturn ĠW sl Maven Distribution ( this , Ġw sl File , Ġ" default ") ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġget J dk Path ( w sl Distribution : ĠW SL Distribution ): ĠString ? Ġ{ ĊĠĠĠ Ġreturn Ġw sl Distribution . get EnvironmentVariable (" JDK _ HOME ") ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun ĠW SL Distribution . get Windows File ( w sl File : ĠFile ): ĠFile Ġ{ ĊĠĠĠ Ġreturn ĠFile Util . to System In dependent Name ( w sl File . path ). let ( this :: get Windows Path ). let (:: File ) ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun ĠW SL Distribution . get W sl File ( windows File : ĠFile ): ĠFile ? Ġ{ ĊĠĠĠ Ġreturn Ġwindows File . path . let ( this :: get W sl Path )?. let (:: File ) ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġ< T > Ġresolve W sl Aware ( project : ĠProject ?, Ġordinary : ĠSupplier < T >, Ġw sl : ĠFunction < W SL Distribution , ĠT >): ĠT Ġ{ ĊĠĠĠ Ġif Ġ( project Ġ== Ġnull Ġ&& ĠApplication Manager . getApplication (). is UnitTest Mode ) Ġ{ ĊĠĠĠĠĠ ĠMaven Log . LOG . error (" resolve W sl Aware : ĠProject Ġis Ġnull ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġw sl Distribution Ġ= Ġproject ?. let Ġ{ Ġtry Get W sl Distribution ( it ) Ġ} Ġ?: Ġreturn Ġordinary . get () ĊĠĠĠ Ġreturn Ġw sl . apply ( w sl Distribution ) ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġget Local Repo ( project : ĠProject ?, Ġoverridden Local Repository : ĠString ?, Ġmaven Home : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaven Settings File : ĠString ?, Ġmaven Config : ĠMaven Config ?): ĠFile Ġ{ ĊĠĠĠ Ġvar Ġsetting Path Ġ= Ġmaven Settings File ; ĊĠĠĠ Ġif Ġ( StringUtil . isEmpty Or Spaces ( maven Settings File )) Ġ{ ĊĠĠĠĠĠ Ġsetting Path Ġ= Ġmaven Config ?. get FilePath ( Maven Config Settings . ALTER N ATE _ USER _ SETTINGS ) Ġ?: Ġ"" ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresolve W sl Aware ( project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġresolve Local Repository ( over ridden Local Repository , Ġmaven Home , Ġsetting Path ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġw sl : ĠW SL Distribution Ġ-> Ġw sl . resolve Local Repository ( over ridden Local Repository , Ġmaven Home , Ġsetting Path ) Ġ}) ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun ĠgetUser Settings ( project : ĠProject ?, Ġuser Settings Path : ĠString ?, Ġmaven Config : ĠMaven Config ?): ĠFile Ġ{ ĊĠĠĠ Ġvar Ġsetting Path Ġ= Ġuser Settings Path ; ĊĠĠĠ Ġif Ġ( StringUtil . isEmpty Or Spaces ( user Settings Path )) Ġ{ ĊĠĠĠĠĠ Ġsetting Path Ġ= Ġmaven Config ?. get FilePath ( Maven Config Settings . ALTER N ATE _ USER _ SETTINGS ) Ġ?: Ġ"" ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresolve W sl Aware ( project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġresolve User Settings File ( setting Path ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġw sl : ĠW SL Distribution Ġ-> Ġw sl . resolve User Settings File ( setting Path ) Ġ}) ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġget Global Settings ( project : ĠProject ?, Ġglobal Settings Path : ĠString ?, Ġmaven Config : ĠMaven Config ?): ĠFile ? Ġ{ ĊĠĠĠ Ġval ĠfilePath Ġ= Ġmaven Config ?. get FilePath ( Maven Config Settings . ALTER N ATE _ GLOBAL _ SETTINGS ) ĊĠĠĠ Ġif Ġ( filePath Ġ!= Ġnull ) Ġreturn ĠFile ( filePath ) ĊĠĠĠ Ġreturn Ġresolve W sl Aware ( project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġresolve Global Settings File ( global Settings Path ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġw sl : ĠW SL Distribution Ġ-> Ġw sl . resolve Global Settings File ( global Settings Path ) Ġ}) ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġresolve Maven Home ( project : ĠProject ?, Ġmaven Home : ĠString ?) Ġ= ĊĠĠĠ Ġresolve W sl Aware ( project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġresolve Maven Home Directory ( maven Home ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġw sl : ĠW SL Distribution Ġ-> Ġw sl . resolve Maven Home Directory ( maven Home ) Ġ}) ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġuse W sl Maven ( project : ĠProject ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġproject W sl Dist r Ġ= Ġtry Get W sl Distribution ( project ) Ġ?: Ġreturn Ġfalse ĊĠĠĠ Ġval Ġj dk W sl Dist r Ġ= Ġtry Get W sl Distribution For Path ( Project Root Manager . getInstance ( project ). project Sdk ?. home Path ) Ġ?: Ġreturn Ġtrue ĊĠĠĠ Ġreturn Ġj dk W sl Dist r . id Ġ== Ġproject W sl Dist r . id ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġsame Dist ributions ( first : ĠW SL Distribution ?, Ġsecond : ĠW SL Distribution ?): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġfirst ?. id Ġ== Ġsecond ?. id ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġrestart Maven Connectors If J dk Incorrect ( project : ĠProject ) Ġ{ ĊĠĠĠ ĠApplication Manager . getApplication (). invoke Later Ġ{ ĊĠĠĠĠĠ ĠProgress Manager . getInstance (). run Process With Progress S ynchronously ( ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġproject W sl Dist r Ġ= Ġtry Get W sl Distribution ( project ) ĊĠĠĠĠĠĠĠĠĠ Ġvar Ġneed Reset Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠ ĠMaven Server Manager . getInstance (). all Connectors . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . project Ġ== Ġproject ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj dk W sl Dist r Ġ= Ġtry Get W sl Distribution For Path ( it . jdk . home Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( project W sl Dist r Ġ!= Ġnull Ġ&& Ġit . support Type Ġ!= Ġ" W SL ") Ġ|| Ġ! same Dist ributions ( project W sl Dist r , Ġj dk W sl Dist r )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġneed Reset Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . shutdown ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(! need Reset ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaven Projects Manager . getInstance ( project ). embed ders Manager . reset () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}, ĠSync Bundle . message (" maven . sync . restart ing "), Ġfalse , Ġproject ) ĊĠĠĠ Ġ} ĊĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġcheck W sl J dk And Show Notification ( project : ĠProject ?) Ġ{ ĊĠĠĠ Ġval Ġproject W sl Dist r Ġ= Ġtry Get W sl Distribution ( project !! ) ĊĠĠĠ Ġval Ġsdk Ġ= ĠProject Root Manager . getInstance ( project ). project Sdk ĊĠĠĠ Ġif Ġ( sdk Ġ== Ġnull ) Ġreturn ; ĊĠĠĠ Ġval Ġj dk W sl Dist r Ġ= Ġtry Get W sl Distribution For Path ( sdk . home Path ) ĊĠĠĠ Ġval ĠFIX _ STR Ġ= Ġ" FIX " ĊĠĠĠ Ġval ĠOPEN _ STR Ġ= Ġ" OPEN " ĊĊĠĠĠ Ġif Ġ( same Dist ributions ( project W sl Dist r , Ġj dk W sl Dist r )) Ġreturn ĊĠĠĠ Ġval Ġlistener Ġ= Ġobject Ġ: ĠNotification Listener Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġhyper link Update ( notification : ĠNotification , Ġevent : ĠHyper link Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event . description Ġ== ĠOPEN _ STR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġconfigurable Ġ= ĠProject Structure Configurable . getInstance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject ) ĊĠĠĠĠĠĠĠĠĠ ĠShow Settings Util . getInstance (). edit Configurable ( project , Ġconfigurable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace Ġ= ĠPlace (). put Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProject Structure Configurable . CATEGORY , Ġconfigurable . project Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigurable . navigate To ( place , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( try SetUp Existing J dk ( project , Ġproject W sl Dist r , Ġnotification )) Ġreturn ĊĠĠĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). invoke Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Or Download New J dk ( project , Ġproject W sl Dist r , Ġsdk , Ġnotification , Ġthis ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( project W sl Dist r Ġ!= Ġnull Ġ&& Ġj dk W sl Dist r Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ ĠNotification ( MA VEN _ NOTIFICATION _ GROUP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaven Project Bundle . message (" w sl . windows . jdk . used . for . w sl "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaven Project Bundle . message (" w sl . windows . jdk . used . for . w sl . descr ", ĠOPEN _ STR , ĠFIX _ STR ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Type . WARNING ). set Listener ( listener ). notify ( project ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġif Ġ( project W sl Dist r Ġ== Ġnull Ġ&& Ġj dk W sl Dist r Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ ĠNotification ( MA VEN _ NOTIFICATION _ GROUP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaven Project Bundle . message (" w sl . w sl . jdk . used . for . windows "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaven Project Bundle . message (" w sl . w sl . jdk . used . for . windows . descr ", ĠOPEN _ STR , ĠFIX _ STR ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Type . WARNING ). set Listener ( listener ). notify ( project ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġif Ġ( project W sl Dist r Ġ!= Ġnull Ġ&& Ġj dk W sl Dist r Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ ĠNotification ( MA VEN _ NOTIFICATION _ GROUP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaven Project Bundle . message (" w sl . different . w sl . jdk . used "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaven Project Bundle . message (" w sl . different . w sl . jdk . used . descr ", ĠOPEN _ STR , ĠFIX _ STR ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Type . WARNING ). set Listener ( listener ). notify ( project ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtry SetUp Existing J dk ( project : ĠProject , Ġproject W sl Dist r : ĠW SL Distribution ?, Ġnotification : ĠNotification ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġsdk Ġ= Ġservice < Project J dk Table >(). all J dk s . filter Ġ{ ĊĠĠĠĠĠ Ġsame Dist ributions ( project W sl Dist r , Ġit . home Path ?. let ( W sl Path :: get Distribution By Windows Un c Path )) ĊĠĠĠ Ġ}. max With OrNull ( compare By ( Version Comparator Util . COMP AR ATOR ) Ġ{ Ġit . version String Ġ}) ĊĠĠĠ Ġif Ġ( sdk Ġ== Ġnull ) Ġreturn Ġfalse ; ĊĠĠĠ ĠWrite Action . run And Wait < RuntimeException > Ġ{ ĊĠĠĠĠĠ ĠProject Root Manager Ex . getInstance ( project ). project Sdk Ġ= Ġsdk ĊĠĠĠĠĠ Ġnotification . hide Bal loon () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġfind Or Download New J dk ( project : ĠProject , Ġproject W sl Dist r : ĠW SL Distribution ?, Ġsdk : ĠS dk , Ġnotification : ĠNotification , Ġlistener : ĠNotification Listener ) Ġ{ ĊĠĠĠ Ġval Ġj dk Task Ġ= Ġobject Ġ: ĠTask . Background able ( null , ĠMaven Project Bundle . message (" w sl . jdk . search ing "), Ġfalse ) Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġrun ( indicator : ĠProgress Indicator ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsdk Path Ġ= Ġservice < J dk Finder >(). suggest Home Paths (). filter Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsame Dist ributions ( project W sl Dist r , ĠW sl Path . get Distribution By Windows Un c Path ( it )) ĊĠĠĠĠĠĠĠ Ġ}. first OrNull () ĊĠĠĠĠĠĠĠ Ġif Ġ( sdk Path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠWrite Action . run And Wait < RuntimeException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj dk Name Ġ= ĠS dk Configuration Util . create Unique Sdk Name ( Java Sdk . getInstance (), Ġsdk Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ ĠProject J dk Table . getInstance (). all J dk s . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew J dk Ġ= ĠJava Sdk . getInstance (). create J dk ( jdk Name , Ġsdk Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject J dk Table . getInstance (). add J dk ( new J dk ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject Root Manager Ex . getInstance ( project ). project Sdk Ġ= Ġnew J dk ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification . hide Bal loon () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinstaller Ġ= ĠJ dk Installer . getInstance () ĊĠĠĠĠĠĠĠ Ġval Ġj dk Predicate Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġproject W sl Dist r Ġ!= Ġnull Ġ-> ĠJ dk Predicate . for W SL () ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠJ dk Predicate . default () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmodel Ġ= ĠJ dk List Downloader . getInstance (). download Model For J dk Installer ( indicator , Ġj dk Predicate ) ĊĠĠĠĠĠĠĠ Ġif Ġ( model . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠNotification ( MA VEN _ NOTIFICATION _ GROUP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaven Project Bundle . message (" maven . w sl . jdk . fix . failed "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaven Project Bundle . message (" maven . w sl . jdk . fix . failed . descr "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Type . ERROR ). set Listener ( listener ). notify ( project ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġhome Dir Ġ= Ġinstaller . default Install Dir ( model [ 0 ], Ġproject W sl Dist r ) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġinstaller . prepare J dk Installation ( model [ 0 ], Ġhome Dir ) ĊĠĠĠĠĠĠĠĠĠ Ġinstaller . install J dk ( request , Ġindicator , Ġproject ) ĊĠĠĠĠĠĠĠĠĠ Ġnotification . hide Bal loon () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ ĠProgress Manager . getInstance (). run ( jdk Task ) ĊĠ Ġ} Ċ } Ċ