// ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ġand Ġcontributors . Ġ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 . advert iser Ċ Ċ import Ġcom . intellij . openapi . extensions . Plugin Descriptor Ċ import Ġcom . intellij . openapi . extensions . Plugin Id Ċ import Ġcom . intellij . openapi . util . Comp aring Ċ import Ġcom . intellij . openapi . util . Modification Tracker Ċ import Ġcom . intellij . util . xml b . annotations .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ @ Tag (" plugin ") Ċ class ĠPlugin Data Ġ@ Jvm Over loads Ġconstructor ( ĊĠ Ġ@ Attribute (" plugin Id ") Ġval Ġplugin Id String : ĠString Ġ= Ġ"", ĊĠ Ġ@ Attribute (" plugin Name ") Ġprivate Ġval Ġnullable Plugin Name : ĠString ? Ġ= Ġnull , ĊĠ Ġ@ Attribute (" bund led ") Ġval Ġis Bund led : ĠBoolean Ġ= Ġfalse , ĊĠ Ġ@ Attribute (" from Custom Repository ") Ġval Ġis From Custom Repository : ĠBoolean Ġ= Ġfalse , Ċ ) Ġ: ĠComparable < Plugin Data > Ġ{ ĊĊĠ Ġval Ġplugin Id : ĠPlugin Id Ġget () Ġ= ĠPlugin Id . getId ( plugin Id String ) ĊĊĠ Ġval Ġplugin Name Ġ= Ġnullable Plugin Name Ġ?: Ġplugin Id String ĊĊĠ Ġconstructor ( descriptor : ĠPlugin Descriptor ) Ġ: Ġthis ( ĊĠĠĠ Ġdescriptor . plugin Id . id String , ĊĠĠĠ Ġdescriptor . name , ĊĠĠĠ Ġdescriptor . is Bund led , ĊĠ Ġ) ĊĊĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠ Ġother Ġas ĠPlugin Data ĊĠĠĠ Ġreturn Ġis Bund led Ġ== Ġother . is Bund led ĊĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġplugin Id String Ġ== Ġother . plugin Id String ĊĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ( nullable Plugin Name Ġ== Ġnull Ġ|| Ġnullable Plugin Name Ġ== Ġother . nullable Plugin Name ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġplugin Id String . hashCode () ĊĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġis Bund led . hashCode () ĊĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ( nullable Plugin Name ?. hashCode () Ġ?: Ġ 0 ) ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcompare To ( other : ĠPlugin Data ): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( is Bund led Ġ&& Ġ! other . is Bund led ) Ġ- 1 ĊĠĠĠ Ġelse Ġif Ġ(! is Bund led Ġ&& Ġother . is Bund led ) Ġ 1 ĊĠĠĠ Ġelse ĠComp aring . compare ( plugin Id String , Ġother . plugin Id String ) ĊĠ Ġ} Ċ } Ċ Ċ @ Tag (" feature Plugin ") Ċ class ĠFeature Plugin Data Ġ@ Jvm Over loads Ġconstructor ( ĊĠ Ġ@ Attribute (" displayName ") Ġval ĠdisplayName : ĠString Ġ= Ġ"", ĊĠ Ġ@ Property ( sur round With Tag Ġ= Ġfalse ) Ġval Ġplugin Data : ĠPlugin Data Ġ= ĠPlugin Data (), Ċ ) Ċ Ċ @ Tag (" plugins ") Ċ class ĠPlugin DataSet Ġ@ Jvm Over loads Ġconstructor ( data Set : ĠSet < Plugin Data > Ġ= Ġset Of ()) Ġ{ ĊĊĠ Ġ@ Jvm Field ĊĠ Ġ@ X Collection ( style Ġ= ĠX Collection . Style . v 2 ) ĊĠ Ġval ĠdataSet Ġ= Ġmutable Set Of < Plugin Data >() ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġthis . data Set Ġ+= ĠdataSet ĊĠ Ġ} Ċ } Ċ Ċ @ Tag (" features ") Ċ class ĠPlugin Feature Map Ġ@ Jvm Over loads Ġconstructor ( feature Map : ĠMap < String , ĠSet < Plugin Data >> Ġ= Ġmap Of ()) Ġ: ĠMod ification Tracker Ġ{ ĊĊĠ Ġ@ Jvm Field ĊĠ Ġ@ X Map ĊĠ Ġval Ġfeature Map Ġ= Ġmutable Map Of < String , ĠPlugin DataSet >() ĊĊĠ Ġ@ Jvm Field ĊĠ Ġvar Ġlast UpdateTime : ĠLong Ġ= Ġ 0 L ĊĊĠ Ġprivate Ġvar Ġmodification Count Ġ= Ġ 0 L ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġfeature Map . entries . forEach Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠ Ġthis . feature Map [ entry . key ] Ġ= ĠPlugin DataSet ( entry . value ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġupdate ( feature Map : ĠMap < String , ĠSet < Plugin Data >>) Ġ{ ĊĠĠĠ Ġfor Ġ(( id , Ġplugins ) Ġin Ġfeature Map ) Ġ{ ĊĠĠĠĠĠ Ġthis . feature Map . get Or Put ( id ) Ġ{ ĠPlugin DataSet () Ġ}. data Set . addAll ( plugins ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġlast UpdateTime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠ Ġmodification Count ++ ĊĠ Ġ} ĊĊĠ Ġval Ġoutdated Ġget () Ġ= ĠSystem . currentTimeMillis () Ġ- Ġlast UpdateTime Ġ> ĠTimeUnit . DAYS . to Millis ( 1 L ) ĊĊĠ Ġoperator Ġfun Ġget ( implementation Name : ĠString ): ĠSet < Plugin Data > Ġ= Ġfeature Map [ implementation Name ]?. data Set Ġ?: Ġset Of () ĊĊĠ Ġoverride Ġfun Ġget Modification Count (): ĠLong Ġ= Ġmodification Count Ċ }