/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . fir . analysis . collect ors Ċ Ċ import Ġorg . jetbrains . kotlin . fir .* Ċ import Ġorg . jetbrains . kotlin . fir . analysis . collect ors . components .* Ċ import Ġorg . jetbrains . kotlin . fir . analysis . diagnostics . Diagnostic Reporter Ċ import Ġorg . jetbrains . kotlin . fir . analysis . diagnostics . F ir Diagnostic Ċ import Ġorg . jetbrains . kotlin . fir . declarations .* Ċ import Ġorg . jetbrains . kotlin . fir . expressions .* Ċ import Ġorg . jetbrains . kotlin . fir . resolve . Scope Session Ċ import Ġorg . jetbrains . kotlin . fir . resolve . Session Holder Ċ import Ġorg . jetbrains . kotlin . name . Standard Class Ids Ċ import Ġorg . jetbrains . kotlin . fir . types .* Ċ Ċ abstract Ġclass ĠAbstract Diagnostic Collector ( ĊĠĠĠ Ġoverride Ġval Ġsession : ĠF ir Session , ĊĠĠĠ Ġoverride Ġval Ġscope Session : ĠScope Session Ġ= ĠScope Session (), Ċ ) Ġ: ĠSession Holder Ġ{ ĊĠĠĠ Ġfun Ġcollect Diagnostics ( fir Declaration : ĠF ir Declaration ): ĠList < F ir Diagnostic <* >> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! components Initialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Components Ġare Ġnot Ġinitialized ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinitialize Collector () ĊĠĠĠĠĠĠĠ Ġfir Declaration . accept ( visitor , Ġnull ) ĊĠĠĠĠĠĠĠ Ġreturn Ġget Collected Diagnostics () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġinitialize Collector () ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġget Collected Diagnostics (): ĠList < F ir Diagnostic <* >> ĊĠĠĠ Ġabstract Ġval Ġreporter : ĠDiagnostic Reporter ĊĊĠĠĠ Ġprotected Ġval Ġcomponents : ĠMutable List < Abstract Diagnostic Collector Component > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġvar Ġcomponents Initialized Ġ= Ġfalse ĊĊĠĠĠ Ġprotected Ġabstract Ġval Ġvisitor : ĠCheck er Running Diagnostic Collector Visitor ĊĊĠĠĠ Ġfun Ġinitialize Components ( var arg Ġcomponents : ĠAbstract Diagnostic Collector Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( components Initialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . components Ġ+= Ġcomponents ĊĠĠĠĠĠĠĠ Ġcomponents Initialized Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSUP PRESS _ ALL _ INFO S Ġ= Ġ" infos " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSUP PRESS _ ALL _ WARNING S Ġ= Ġ" warnings " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSUP PRESS _ ALL _ ERRORS Ġ= Ġ" errors " ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Diagnostics Sup pressed For Container ( annotation Container : ĠF ir Annotation Container ): ĠList < String >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotations Ġ= Ġannotation Container . annotations . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġit . annotation Type Ref . cone Type Ġas ? ĠC one Class Like Type Ġ?: Ġreturn @ filter Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype . lookup Tag . class Id Ġ== ĠStandard Class Ids . Suppress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotations . isEmpty ()) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġannotations . flatMap Ġ{ Ġannotation Call Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Call . arguments . filter Is Instance < F ir Var arg Arguments Expression >(). flatMap Ġ{ Ġvar arg Argument Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar arg Argument . arguments . map NotNull Ġ{ Ġ( it Ġas ? ĠF ir Const Expression <* >) ?. value Ġas ? ĠString ? Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun ĠAbstract Diagnostic Collector . register All Components () Ġ{ ĊĠĠĠ Ġinitialize Components ( ĊĠĠĠĠĠĠĠ ĠDeclaration Check ers Diagnostic Component ( this ), ĊĠĠĠĠĠĠĠ ĠExpression Check ers Diagnostic Component ( this ), ĊĠĠĠĠĠĠĠ ĠType Check ers Diagnostic Component ( this ), ĊĠĠĠĠĠĠĠ ĠError Node Diagnostic Collector Component ( this ), ĊĠĠĠĠĠĠĠ ĠControl Flow Analysis Diagnostic Component ( this ), ĊĠĠĠ Ġ) Ċ } Ċ