// ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 Ġ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 Ġcom . intellij . openapi . external System . import ing Ċ Ċ import Ġcom . intellij . ide . highlighter . Project FileType Ċ import Ġcom . intellij . ide . impl . Open Project Task Ċ import Ġcom . intellij . ide . impl . Project Util .* Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . diagnostic . logger Ċ import Ġcom . intellij . openapi . external System . model . External System Data Keys Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . project . Project Manager Ċ import Ġcom . intellij . openapi . project . ex . Project Manager Ex Ċ import Ġcom . intellij . openapi . util . io . File Util Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . platform . Platform Project Open Processor Ċ import Ġcom . intellij . util . io . exists Ċ import Ġorg . jetbrains . annotations . Api Status Ċ import Ġjava . nio . file . Invalid Path Exception Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ Ċ @ Api Status . Experimental Ċ abstract Ġclass ĠAbstract Open Project Provider Ġ: ĠOpen Project Provider Ġ{ ĊĠ Ġprotected Ġabstract Ġfun Ġis Project File ( file : ĠVirtual File ): ĠBoolean ĊĊĠ Ġprotected Ġabstract Ġfun Ġlink And Refresh Project ( project Directory : ĠPath , Ġproject : ĠProject ) ĊĊĠ Ġoverride Ġfun Ġcan Open Project ( file : ĠVirtual File ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( file . isDirectory ) Ġfile . children . any (:: is Project File ) Ġelse Ġis Project File ( file ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġopen Project ( project File : ĠVirtual File , Ġproject To Close : ĠProject ?, Ġforce Open In New Frame : ĠBoolean ): ĠProject ? Ġ{ ĊĠĠĠ ĠLOG . debug (" Open Ġproject Ġfrom Ġ$ project File ") ĊĠĠĠ Ġval Ġproject Directory Ġ= Ġget Project Directory ( project File ) ĊĠĠĠ Ġif Ġ( focus On Opened Same Project ( project Directory . path )) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġif Ġ( can Open Platform Project ( project Directory )) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġopen Platform Project ( project Directory , Ġproject To Close , Ġforce Open In New Frame ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġn io Path Ġ= Ġproject Directory . to Nio Path () ĊĠĠĠ Ġval Ġoptions Ġ= ĠOpen Project Task ( isNew Project Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforce Open In New Frame Ġ= Ġforce Open In New Frame , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject To Close Ġ= Ġproject To Close , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Configur ators Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Open Ġ= Ġ{ Ġproject Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . put UserData ( External System Data Keys . NEW LY _ IMPORTED _ PROJECT , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). invoke And Wait Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink And Refresh Project ( nio Path , Ġproject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Last Project Location ( nio Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġreturn ĠProject Manager Ex . getInstance Ex (). open Project ( nio Path , Ġoptions ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġlink To Existing Project ( project File : ĠVirtual File , Ġproject : ĠProject ) Ġ{ ĊĠĠĠ ĠLOG . debug (" Import Ġproject Ġfrom Ġ$ project File ") ĊĠĠĠ Ġval Ġproject Directory Ġ= Ġget Project Directory ( project File ) ĊĠĠĠ Ġlink And Refresh Project ( project Directory . to Nio Path (), Ġproject ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcan Open Platform Project ( project Directory : ĠVirtual File ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ(! Platform Project Open Processor . getInstance (). can Open Project ( project Directory )) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( is Child Exist Using Io ( project Directory , ĠProject . DIRECTORY _ STORE _ FOLDER )) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( is Child Exist Using Io ( project Directory , Ġproject Directory . name Ġ+ ĠProject FileType . DOT _ DEFAULT _ EXTENSION )) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġis Child Exist Using Io ( parent : ĠVirtual File , Ġname : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ ĠPaths . get ( File Util . to System Dependent Name ( parent . path ), Ġname ). exists () ĊĠĠĠ Ġ} ĊĠĠĠ Ġcatch Ġ( e : ĠInvalid Path Exception ) Ġ{ ĊĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġfocus On Opened Same Project ( project Directory : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġfor Ġ( project Ġin ĠProject Manager . getInstance (). open Projects ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( is Same Project ( project Directory , Ġproject )) Ġ{ ĊĠĠĠĠĠĠĠ Ġfocus Project Window ( project , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġopen Platform Project ( project Directory : ĠVirtual File , Ġproject To Close : ĠProject ?, Ġforce Open In New Frame : ĠBoolean ): ĠProject ? Ġ{ ĊĠĠĠ Ġval Ġopen Processor Ġ= ĠPlatform Project Open Processor . getInstance () ĊĠĠĠ Ġreturn Ġopen Processor . do Open Project ( project Directory , Ġproject To Close , Ġforce Open In New Frame ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Project Directory ( file : ĠVirtual File ): ĠVirtual File Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( file . isDirectory ) Ġfile Ġelse Ġfile . parent ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprotected Ġval ĠLOG Ġ= Ġlogger < Abstract Open Project Provider >() ĊĠ Ġ} Ċ }