/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand Ġother Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġcom . jetbrains . plugin . structure . intellij . extractor Ċ Ċ import Ġcom . jetbrains . plugin . structure . base . de compress . De compressor Size Limit Exceeded Exception Ċ import Ġcom . jetbrains . plugin . structure . base . plugin . Plugin Problem Ċ import Ġcom . jetbrains . plugin . structure . base . plugin . Settings Ċ import Ġcom . jetbrains . plugin . structure . base . problems . Plugin FileSize Is Too Large Ċ import Ġcom . jetbrains . plugin . structure . base . utils .* Ċ import Ġcom . jetbrains . plugin . structure . intellij . problems . Plugin Zip Contains Multiple Files Ċ import Ġcom . jetbrains . plugin . structure . intellij . problems . Plugin Zip Contains Unknown File Ċ import Ġcom . jetbrains . plugin . structure . intellij . problems . Plugin Zip IsEmpty Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ Ċ object ĠPlugin Extractor Ġ{ ĊĊĠ Ġfun Ġextract Plugin ( plugin File : ĠPath , Ġextract Directory : ĠPath ): ĠExtract or Result Ġ{ ĊĠĠĠ ĠFiles . create Directories ( extract Directory ) ĊĠĠĠ Ġval Ġextracted Plugin Ġ= ĠFiles . create Temp Directory ( extract Directory , Ġ" plugin _ ") ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġextract Zip ( plugin File , Ġextracted Plugin , ĠSettings . INTEL LI J _ PLUGIN _ SIZE _ LIMIT . getAs Long ()) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠDe compressor Size Limit Exceeded Exception ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġfail ( Plugin FileSize Is Too Large ( e . size Limit ), Ġextracted Plugin ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġextracted Plugin . delete Quiet ly () ĊĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġget Extractor Result ( extract ed Plugin ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsuccess ( actual File : ĠPath , Ġfile ToDelete : ĠPath ): ĠExtract or Result Ġ= ĊĠĠĠ ĠExtract or Result . Success ( Extract ed Plugin ( actual File , Ġfile ToDelete )) ĊĊĠ Ġprivate Ġfun Ġfail ( problem : ĠPlugin Problem , Ġextracted Plugin : ĠPath ): ĠExtract or Result Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġreturn ĠExtract or Result . Fail ( problem ) ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠ Ġextracted Plugin . delete Quiet ly () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Extractor Result ( extract ed Plugin : ĠPath ): ĠExtract or Result Ġ{ ĊĠĠĠ Ġval Ġroot Files Ġ= Ġextracted Plugin . list Files () ĊĠĠĠ Ġwhen Ġ( root Files . size ) Ġ{ ĊĠĠĠĠĠĠ 0 Ġ-> Ġreturn Ġfail ( Plugin Zip IsEmpty (), Ġextracted Plugin ) ĊĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsingle File Ġ= Ġroot Files [ 0 ] ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( single File . is Jar ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsuccess ( single File , Ġextracted Plugin ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( single File . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( single File . simple Name Ġ== Ġ" lib ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess ( extract ed Plugin , Ġextracted Plugin ) ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess ( single File , Ġextracted Plugin ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġfail ( Plugin Zip Contains Unknown File ( single File . simple Name ), Ġextracted Plugin ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġfail ( Plugin Zip Contains Multiple Files ( root Files . map Ġ{ Ġit . simple Name Ġ}. sorted ()), Ġextracted Plugin ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ Ċ } Ċ