// Ġ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 . internal . statistic . event Log . whitelist Ċ Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . intellij . internal . statistic . event Log .* Ċ import Ġcom . intellij . internal . statistic . service . f us . collect ors . Application Usage s Collector Ċ import Ġcom . intellij . internal . statistic . service . f us . collect ors . FU Counter Usage Logger Ċ import Ġcom . intellij . internal . statistic . service . f us . collect ors . Feature Usage s Collector Ċ import Ġcom . intellij . internal . statistic . service . f us . collect ors . Project Usage s Collector Ċ import Ġcom . intellij . openapi . application . Application Starter Ċ import Ġcom . intellij . openapi . util . io . File Util Ċ import Ġjava . io . File Ċ import Ġkotlin . system . exit Process Ċ Ċ object ĠWh itelist Builder Ġ{ ĊĠ Ġdata Ġclass ĠWh itelist Field ( val Ġpath : ĠString , Ġval Ġvalue : ĠSet < String >) ĊĠ Ġdata Ġclass ĠWh itelist Event ( val Ġevent : ĠString , Ġval Ġfields : ĠSet < Whitelist Field >) ĊĠ Ġdata Ġclass ĠWh itelist Group ( val Ġid : ĠString , Ġval Ġtype : ĠString , Ġval Ġversion : ĠInt , Ġval Ġschema : ĠSet < Whitelist Event >) ĊĊĠ Ġprivate Ġfun Ġfield Schema ( field : ĠEvent Field <* >, ĠfieldName : ĠString ): ĠSet < Whitelist Field > Ġ{ ĊĠĠĠ Ġif Ġ( field Ġ== ĠEvent Fields . Plugin Info Ġ|| Ġfield Ġ== ĠEvent Fields . Plugin Info From Instance ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġhash Set Of ( ĊĠĠĠĠĠĠĠ ĠWh itelist Field (" plugin ", Ġhash Set Of ("{ util # plugin }") ), ĊĠĠĠĠĠĠĠ ĠWh itelist Field (" plugin _ type ", Ġhash Set Of ("{ util # plugin _ type }") ), ĊĠĠĠĠĠĠĠ ĠWh itelist Field (" plugin _ version ", Ġhash Set Of ("{ util # plugin _ version } ")) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġwhen Ġ( field ) Ġ{ ĊĠĠĠĠĠ Ġis ĠObject Event Field Ġ-> Ġbuild Object Even Scheme ( fieldName , Ġfield . fields ) ĊĠĠĠĠĠ Ġis ĠObject List Event Field Ġ-> Ġbuild Object Even Scheme ( fieldName , Ġfield . fields ) ĊĠĠĠĠĠ Ġis ĠPrimitive Event Field Ġ-> Ġhash Set Of ( Whitelist Field ( fieldName , Ġfield . validation Rule . to HashSet ())) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġbuild Object Even Scheme ( fieldName : ĠString , Ġfields : ĠArray < out ĠEvent Field <* >> ): ĠSet < Whitelist Field > Ġ{ ĊĠĠĠ Ġval Ġwhitelist Fields Ġ= Ġhash Set Of < Whitelist Field >() ĊĠĠĠ Ġfor Ġ( event Field Ġin Ġfields ) Ġ{ ĊĠĠĠĠĠ Ġwhitelist Fields . addAll ( field Schema ( event Field , ĠfieldName Ġ+ Ġ"." Ġ+ Ġevent Field . name )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġwhitelist Fields ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġbuild Whitelist (): ĠList < Whitelist Group > Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Whitelist Group >() ĊĠĠĠ Ġcollect Whitelist From Extensions ( result , Ġ" counter ", ĠF U Counter Usage Logger . instantiate Counter Collectors ()) ĊĠĠĠ Ġcollect Whitelist From Extensions ( result , Ġ" state ", ĠApplication Usage s Collector . EP _ NAME . extension List ) ĊĠĠĠ Ġcollect Whitelist From Extensions ( result , Ġ" state ", ĠProject Usage s Collector . EP _ NAME . extension List ) ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcollect Whitelist From Extensions ( result : ĠMutable List < Whitelist Group >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Type : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollect ors : ĠCollection < Feature Usage s Collector >) Ġ{ ĊĠĠĠ Ġfor Ġ( collector Ġin Ġcollect ors ) Ġ{ ĊĠĠĠĠĠ Ġval Ġgroup Ġ= Ġcollector . group Ġ?: Ġcontinue ĊĠĠĠĠĠ Ġval Ġwhitelist Events Ġ= Ġgroup . events . groupBy Ġ{ Ġit . eventId Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( name , Ġevents ) Ġ-> ĠWh itelist Event ( name , Ġbuild Fields ( events )) Ġ} ĊĠĠĠĠĠĠĠ Ġ. to HashSet () ĊĠĠĠĠĠ Ġval Ġwhitelist Group Ġ= ĠWh itelist Group ( group . id , Ġgroup Type , Ġgroup . version , Ġwhitelist Events ) ĊĠĠĠĠĠ Ġresult . add ( whitelist Group ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġbuild Fields ( events : ĠList < Base EventId >): ĠHashSet < Whitelist Field > Ġ{ ĊĠĠĠ Ġreturn Ġevents . flatMap Ġ{ Ġit . get Fields () Ġ} ĊĠĠĠĠĠ Ġ. flatMap Ġ{ Ġfield Ġ-> Ġfield Schema ( field , Ġfield . name ) Ġ} ĊĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit . path Ġ} ĊĠĠĠĠĠ Ġ. map Ġ{ Ġ( name , Ġvalues ) Ġ-> ĠWh itelist Field ( name , Ġvalues . flatMap Ġ{ Ġit . value Ġ}. to HashSet ()) Ġ} ĊĠĠĠĠĠ Ġ. to HashSet () ĊĠ Ġ} Ċ } Ċ Ċ class ĠWh itelist Builder App Starter Ġ: ĠApplication Starter Ġ{ ĊĠ Ġoverride Ġfun Ġget CommandName (): ĠString Ġ= Ġ" build Whitelist " ĊĊĠ Ġoverride Ġfun Ġmain ( args : ĠList < String >) Ġ{ ĊĠĠĠ Ġval Ġgroups Ġ= ĠWh itelist Builder . build Whitelist () ĊĠĠĠ Ġval Ġtext Ġ= ĠGson Builder (). set Pretty Print ing (). create (). toJson ( groups ) ĊĠĠĠ Ġif Ġ( args . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠ ĠFile Util . write ToFile ( File ( args [ 1 ]), Ġtext ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġprintln ( text ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġexit Process ( 0 ) ĊĠ Ġ} Ċ } Ċ