// Ġ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 Ġcom . intellij . ide . plugins Ċ Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . file . FileSystem Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Provider NotFoundException Ċ import Ġjava . nio . file . spi . FileSystem Provider Ċ import Ġjava . util .* Ċ Ċ // Ġparent Context Ġis Ġnull Ġonly Ġfor ĠCore Application Environment Ġ- Ġit Ġis Ġnot Ġvalid Ġotherwise Ġbecause Ġin Ġthis Ġcase ĠXML Ġis Ġnot Ġintern ed . Ċ internal Ġclass ĠDescriptor Loading Context Ġ: ĠAuto Closeable Ġ{ ĊĠ Ġprivate Ġvar Ġopened Files : ĠMutable Map < Path , ĠFileSystem >? Ġ= Ġnull ĊĊĠ Ġprivate Ġvar Ġzip Fs Provider : ĠFileSystem Provider ? Ġ= Ġnull ĊĊĠ Ġprivate Ġfun Ġget Zip Fs Provider (): ĠFileSystem Provider Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġzip Fs Provider ĊĠĠĠ Ġif Ġ( result Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġresult Ġ= Ġfind Zip Fs Provider () ĊĠĠĠĠĠ Ġzip Fs Provider Ġ= Ġresult ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġfind Zip Fs Provider (): ĠFileSystem Provider Ġ{ ĊĠĠĠ Ġfor Ġ( provider Ġin ĠFileSystem Provider . installed Providers ()) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( provider . scheme Ġ== Ġ" jar ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn Ġprovider ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġcatch Ġ( ignored : ĠUnsupportedOperationException ) Ġ{ ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġthrow ĠProvider NotFoundException (" Provider Ġnot Ġfound ") ĊĠ Ġ} ĊĊĠ Ġfun Ġopen ( file : ĠPath ): ĠFileSystem Ġ{ ĊĠĠĠ Ġif Ġ( opened Files Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġopened Files Ġ= ĠHashMap () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġopened Files !!. compute If Absent ( file ) Ġ{ ĊĠĠĠĠĠ Ġ@ Suppress (" Spell Checking Inspection ") ĊĠĠĠĠĠ Ġget Zip Fs Provider (). new FileSystem ( it , ĠCollections . singleton Map (" zip info - time ", Ġ" false ")) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠ Ġfor Ġ( file Ġin Ġ( opened Files Ġ?: Ġreturn ). values ) Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġfile . close () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġcatch Ġ( ignore : ĠIOException ) Ġ{ ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }