/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 1 Ġ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 . test . frontend . classic . handlers Ċ Ċ import Ġorg . jetbrains . kotlin . code Meta Info . model . Code Meta Info Ċ import Ġorg . jetbrains . kotlin . code Meta Info . model . Diagnostic Code Meta Info Ċ import Ġorg . jetbrains . kotlin . code Meta Info . model . J specify Marker Code Meta Info Ċ import Ġorg . jetbrains . kotlin . diagnostics . Errors Ċ import Ġorg . jetbrains . kotlin . fir . analysis . diagnostics . F ir Errors Ċ import Ġorg . jetbrains . kotlin . load . java . JS PEC IFY _ AN NOT ATIONS _ PACKAGE Ċ import Ġorg . jetbrains . kotlin . load . java . Report Level Ċ import Ġorg . jetbrains . kotlin . load . java . getDefault Report Level For Annotation Ċ import Ġorg . jetbrains . kotlin . resolve . jvm . diagnostics . Errors Jvm Ċ import Ġorg . jetbrains . kotlin . test . directives . Foreign Annotations Directives Ċ import Ġorg . jetbrains . kotlin . test . frontend . classic . Classic Frontend Output Artifact Ċ import Ġorg . jetbrains . kotlin . test . frontend . fir . F ir Output Artifact Ċ import Ġorg . jetbrains . kotlin . test . frontend . fir . handlers . F ir Analysis Handler Ċ import Ġorg . jetbrains . kotlin . test . frontend . fir . handlers . F ir Diagnostic Code Meta Info Ċ import Ġorg . jetbrains . kotlin . test . model . Test File Ċ import Ġorg . jetbrains . kotlin . test . model . Test Module Ċ import Ġorg . jetbrains . kotlin . test . services . Test Services Ċ import Ġorg . jetbrains . kotlin . test . services . global Metadata Info Handler Ċ import Ġorg . jetbrains . kotlin . test . services . source File Provider Ċ Ċ private Ġfun ĠTest Services . generate J specify Metadata Infos ( ĊĠĠĠ Ġmodule : ĠTest Module , Ġfiles : ĠIterable < Test File >, Ġdiagnostic Kind : Ġ( Code Meta Info ) Ġ-> ĠAny ? Ċ ) Ġ{ ĊĠĠĠ Ġval Ġj specify Mode Ġ= Ġmodule . directives [ Foreign Annotations Directives . JS PEC IFY _ STATE ]. single OrNull () ĊĠĠĠĠĠĠĠ Ġ?: ĠgetDefault Report Level For Annotation ( JS PEC IFY _ AN NOT ATIONS _ PACKAGE ) ĊĠĠĠ Ġval Ġdiagnostics To J specify Marks For Mode Ġ= Ġdiagnostics To J specify Marks [ js pec ify Mode ] Ġ?: Ġreturn ĊĊĠĠĠ Ġfor Ġ( test File Ġin Ġfiles ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Lines Ġ= Ġsource File Provider . getContent Of SourceFile ( test File ). lines () ĊĠĠĠĠĠĠĠ Ġval Ġfile Line Positions Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Lines . map Ġ{ Ġit . length Ġ}. running Reduce Ġ{ Ġsum Length , Ġlength Ġ-> Ġsum Length Ġ+ Ġlength Ġ+ Ġ 1 Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnew Meta Infos Ġ= Ġglobal Metadata Info Handler . get Reported Meta Infos For File ( test File ). map NotNull Ġ{ Ġmeta Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiagnostic Ġ= Ġdiagnostic Kind ( meta Info ) Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj specify Mark Ġ= Ġdiagnostics To J specify Marks For Mode [ diagnostic ] Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Index To Paste J specify Mark Ġ= Ġfile Line Positions . indexOf Last Ġ{ Ġit Ġ< Ġmeta Info . start Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition To Paste J specify Mark Ġ= Ġfile Line Positions [ line Index To Paste J specify Mark ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġfile Lines [ line Index To Paste J specify Mark Ġ+ Ġ 1 ]. take While Ġ{ Ġit Ġ== Ġ' Ġ' Ġ}. length ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJ specify Marker Code Meta Info ( position To Paste J specify Mark , Ġposition To Paste J specify Mark , Ġoffset , Ġj specify Mark ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġglobal Metadata Info Handler . add Metadata Infos For File ( test File , Ġnew Meta Infos ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġval Ġdiagnostics To J specify Marks Ġ= Ġmap Of ( ĊĠĠĠ ĠReport Level . WARN Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠ ĠErrors Jvm . NULL ABILITY _ MIS MATCH _ BASE D _ ON _ JAVA _ AN NOT ATIONS Ġto Ġ" js pec ify _ null ness _ mismatch ", ĊĠĠĠĠĠĠĠ ĠErrors Jvm . UPPER _ BOUND _ VI OL ATED _ BASE D _ ON _ JAVA _ AN NOT ATIONS Ġto Ġ" js pec ify _ null ness _ mismatch ", ĊĠĠĠĠĠĠĠ ĠErrors Jvm . NULL ABILITY _ MIS MATCH _ BASE D _ ON _ JAVA _ AN NOT ATIONS Ġto Ġ" js pec ify _ null ness _ mismatch ", ĊĠĠĠĠĠĠĠ ĠErrors Jvm . RECE IVER _ NULL ABILITY _ MIS MATCH _ BASE D _ ON _ JAVA _ AN NOT ATIONS Ġto Ġ" js pec ify _ null ness _ mismatch ", ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġlist ĠFIR Ġwarnings Ġ( they Ġdon 't Ġexist Ġyet ) ĊĠĠĠ Ġ), ĊĠĠĠ ĠReport Level . STRICT Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠ ĠErrors . TYPE _ MIS MATCH Ġto Ġ" js pec ify _ null ness _ mismatch ", ĊĠĠĠĠĠĠĠ ĠErrors . NULL _ FOR _ NONNULL _ TYPE Ġto Ġ" js pec ify _ null ness _ mismatch ", ĊĠĠĠĠĠĠĠ ĠErrors . NOTH ING _ TO _ OVERRIDE Ġto Ġ" js pec ify _ null ness _ mismatch ", ĊĠĠĠĠĠĠĠ ĠErrors . RETURN _ TYPE _ MIS MATCH _ ON _ OVERRIDE Ġto Ġ" js pec ify _ null ness _ mismatch ", ĊĠĠĠĠĠĠĠ ĠErrors . UPPER _ BOUND _ VI OL ATED Ġto Ġ" js pec ify _ null ness _ mismatch ", ĊĠĠĠĠĠĠĠ ĠErrors . UN SAFE _ CALL Ġto Ġ" js pec ify _ null ness _ mismatch ", ĊĊĠĠĠĠĠĠĠ ĠF ir Errors . ARGUMENT _ TYPE _ MIS MATCH Ġto Ġ" js pec ify _ null ness _ mismatch ", ĊĠĠĠĠĠĠĠ ĠF ir Errors . NULL _ FOR _ NONNULL _ TYPE Ġto Ġ" js pec ify _ null ness _ mismatch ", ĊĠĠĠĠĠĠĠ ĠF ir Errors . NOTH ING _ TO _ OVERRIDE Ġto Ġ" js pec ify _ null ness _ mismatch ", ĊĠĠĠĠĠĠĠ ĠF ir Errors . RETURN _ TYPE _ MIS MATCH _ ON _ OVERRIDE Ġto Ġ" js pec ify _ null ness _ mismatch ", ĊĠĠĠĠĠĠĠ ĠF ir Errors . UPPER _ BOUND _ VI OL ATED Ġto Ġ" js pec ify _ null ness _ mismatch ", ĊĠĠĠĠĠĠĠ ĠF ir Errors . UN SAFE _ CALL Ġto Ġ" js pec ify _ null ness _ mismatch ", ĊĠĠĠ Ġ), ĊĠĠĠ ĠReport Level . IGNORE Ġto Ġempty Map () Ċ ) Ċ Ċ class ĠJ specify Diagnostic Compliance Handler ( test Services : ĠTest Services ) Ġ: ĠClass ic Frontend Analysis Handler ( test Services ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġprocess Module ( module : ĠTest Module , Ġinfo : ĠClass ic Frontend Output Artifact ) Ġ= ĊĠĠĠĠĠĠĠ Ġtest Services . generate J specify Metadata Infos ( module , Ġinfo . all Kt Files . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( it Ġas ? ĠDiagnostic Code Meta Info )?. diagnostic ?. factory ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess After All Modules ( some Assertion Was Failed : ĠBoolean ) Ġ{} Ċ } Ċ Ċ class ĠF ir J specify Diagnostic Compliance Handler ( test Services : ĠTest Services ) Ġ: ĠF ir Analysis Handler ( test Services ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġprocess Module ( module : ĠTest Module , Ġinfo : ĠF ir Output Artifact ) Ġ= ĊĠĠĠĠĠĠĠ Ġtest Services . generate J specify Metadata Infos ( module , Ġinfo . all F ir Files . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( it Ġas ? ĠF ir Diagnostic Code Meta Info )?. diagnostic ?. factory ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess After All Modules ( some Assertion Was Failed : ĠBoolean ) Ġ{} Ċ } Ċ