/******************************************************************************* Ċ * ĠCopyright Ġ 2 0 0 0 - 2 0 1 5 ĠJetBrains Ġs . r . o . Ċ * Ċ * ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ * Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ * ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ * Ċ * Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ * Ċ * ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ * Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ * ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ * ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ * Ġlimitations Ġunder Ġthe ĠLicense . Ċ * Ċ ************************************************************************ *******/ Ċ package Ġorg . jetbrains . kotlin . ui . builder Ċ Ċ import Ġorg . eclipse . core . runtime . I Progress Monitor Ċ import Ġorg . eclipse . core . runtime . I Status Ċ import Ġorg . eclipse . core . runtime . Null Progress Monitor Ċ import Ġorg . eclipse . core . runtime . Status Ċ import Ġorg . eclipse . core . runtime . jobs . I Job ChangeEvent Ċ import Ġorg . eclipse . core . runtime . jobs . Job Ċ import Ġorg . eclipse . core . runtime . jobs . Job Change Adapter Ċ import Ġorg . eclipse . jdt . core . I Java Project Ċ import Ġorg . jetbrains . kotlin . analyzer . Analysis Result Ċ import Ġorg . jetbrains . kotlin . core . model . Kotlin Analysis Project Cache Ċ import Ġorg . jetbrains . kotlin . progress . Compilation Canceled Exception Ċ import Ġorg . jetbrains . kotlin . progress . Compilation Canceled Status Ċ import Ġorg . jetbrains . kotlin . progress . Progress Indicator And Compilation Canceled Status Ċ Ċ public Ġclass ĠKotlin Analysis Job ( private Ġval Ġjava Project : ĠI Java Project ) Ġ: ĠJob (" Kotlin ĠAnalysis ") Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Priority ( DE COR ATE ) ĊĠĠĠĠĠĠĠ Ġset System ( true ) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġval Ġfamily Indicator Ġ= Ġconstruct Family Indicator ( java Project ) ĊĠĠĠĠĊĠĠĠ Ġ@ Volatile Ġvar Ġcanceled Ġ= Ġfalse ĊĠĠĠĠĊĠĠĠ Ġoverride Ġfun Ġrun ( monitor : ĠI Progress Monitor ): ĠI Status Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanceled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ ĠProgress Indicator And Compilation Canceled Status . set Compilation Canceled Status ( object Ġ: ĠCompilation Canceled Status Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcheck Canceled () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c anceled ) Ġthrow ĠCompilation Canceled Exception () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! java Project . isOpen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠStatus . OK _ STATUS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanalysis Result Ġ= ĠKotlin Analysis Project Cache . get Analysis Result ( java Project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAnalysis Result Status ( Status . OK _ STATUS , Ġanalysis Result ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠCompilation Canceled Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAnalysis Result Status ( Status . CANCEL _ STATUS , ĠAnalysis Result . EMPTY ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProgress Indicator And Compilation Canceled Status . set Compilation Canceled Status ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġoverride Ġfun Ġbelongs To ( family : ĠAny ): ĠBoolean Ġ= Ġfamily Ġ== Ġfamily Indicator ĊĠĠĠĠĊĠĠĠ Ġoverride Ġfun Ġcancel ing () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . cancel ing () ĊĠĠĠĠĠĠĠ Ġcanceled Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġclass ĠAnalysis Result Status ( val Ġstatus : ĠI Status , Ġval Ġanalysis Result : ĠAnalysis Result ): ĠI Status Ġby Ġstatus Ċ } Ċ Ċ private Ġfun Ġconstruct Family Indicator ( java Project : ĠI Java Project ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġjava Project . getProject (). getName () Ġ+ Ġ"_ kotlin Analysis Family " Ċ } Ċ Ċ fun Ġrun C ancellable Analysis For ( java Project : ĠI Java Project , Ġpost Analysis Task : Ġ( Analysis Result ) Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġval Ġfamily Ġ= Ġconstruct Family Indicator ( java Project ) ĊĠĠĠ ĠJob . get Job Manager (). cancel ( family ) ĊĠĠĠ ĠJob . get Job Manager (). join ( family , ĠNull Progress Monitor ()) Ġ// ĠIt Ġshould Ġbe Ġfast Ġenough ĊĠĠĠĠĊĠĠĠ ĠKotlin Analysis Project Cache . reset Cache ( java Project . project ) ĊĠĠĠĠĊĠĠĠ Ġval Ġanalysis Job Ġ= ĠKotlin Analysis Job ( java Project ) ĊĠĠĠĠĊĠĠĠ Ġanalysis Job . add Job ChangeListener ( object Ġ: ĠJob Change Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdone ( event : ĠI Job ChangeEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġevent . result ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠKotlin Analysis Job . Analysis Result Status Ġ&& Ġresult . is OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Analysis Task ( result . analysis Result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠĠĊĠĠĠ Ġanalysis Job . schedule () Ċ }