// Ġ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 Ġorg . jetbrains . kotlin . idea . cache s . resolve Ċ Ċ import Ġcom . intellij . openapi . module . Module Manager Ċ import Ġcom . intellij . openapi . util . Condition Ċ import Ġcom . intellij . openapi . util . Conditions Ċ import Ġcom . intellij . openapi . vfs . V fs Util Core Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . psi . Psi Manager Ċ import Ġcom . intellij . util . Throwable Runnable Ċ import Ġcom . intellij . util . io . exists Ċ import Ġorg . jetbrains . kotlin . check ers . API _ VERSION _ DIRECT IVE Ċ import Ġorg . jetbrains . kotlin . check ers . diagnostics . factories . Debug Info Diagnostic Factory 0 Ċ import Ġorg . jetbrains . kotlin . check ers . diagnostics . factories . SyntaxError Diagnostic Factory Ċ import Ġorg . jetbrains . kotlin . check ers . utils . Checker TestUtil Ċ import Ġorg . jetbrains . kotlin . check ers . utils . Diagnostics Rendering Configuration Ċ import Ġorg . jetbrains . kotlin . descriptors . impl . Module Descriptor Impl Ċ import Ġorg . jetbrains . kotlin . diagnostics . Diagnostic Ċ import Ġorg . jetbrains . kotlin . diagnostics . Diagnostic Factory Ċ import Ġorg . jetbrains . kotlin . diagnostics . Errors Ċ import Ġorg . jetbrains . kotlin . diagnostics . Severity Ċ import Ġorg . jetbrains . kotlin . idea . Frontend Internals Ċ import Ġorg . jetbrains . kotlin . idea . multi platform . setup M pp Project FromText File Ċ import Ġorg . jetbrains . kotlin . idea . project . Kotlin Multi platform Analysis Mode Component Ċ import Ġorg . jetbrains . kotlin . idea . code Meta Info . Abstract Diagnostic Code Meta Info Test Ċ import Ġorg . jetbrains . kotlin . idea . resolve . getData Flow Value Factory Ċ import Ġorg . jetbrains . kotlin . idea . resolve . get Language Version Settings Ċ import Ġorg . jetbrains . kotlin . idea . stubs . Abstract Multi Module Test Ċ import Ġorg . jetbrains . kotlin . idea . test . IDE A _ TEST _ DATA _ DIR Ċ import Ġorg . jetbrains . kotlin . idea . test . all Kotlin Files Ċ import Ġorg . jetbrains . kotlin . idea . test . run All Ċ import Ġorg . jetbrains . kotlin . idea . util . source Roots Ċ import Ġorg . jetbrains . kotlin . psi . Kt File Ċ import Ġorg . jetbrains . kotlin . test . Directives Ċ import Ġorg . jetbrains . kotlin . test . Kotlin TestUtils Ċ import Ġorg . junit . Assert Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util . regex . Pattern Ċ Ċ abstract Ġclass ĠAbstract Multi Module Ide Resolve Test Ġ: ĠAbstract Multi Module Test () Ġ{ ĊĠĠĠ Ġfun Ġdo Test ( testData Path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Root Ġ= ĠFile ( testData Path ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdependencies Txt Ġ= ĠFile ( testData Path , Ġ" dependencies . txt ") ĊĠĠĠĠĠĠĠ Ġrequire ( dependencies Txt . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ dependencies Txt . absolute Path } Ġdoes Ġnot Ġexist . Ġdependencies . txt Ġis Ġrequired " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġwill Ġimplicitly Ġcopy Ġall Ġsource Ġfiles Ġto Ġtemporary Ġdirectory , Ġclearing Ġthem Ġfrom Ġdiagnostic Ġmarkup Ġin Ġprocess ĊĠĠĠĠĠĠĠ Ġsetup M pp Project FromText File ( test Root ) ĊĊĠĠĠĠĠĠĠ Ġproject . all Kotlin Files () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( module Ġin ĠModule Manager . getInstance ( project ). modules ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( source Root Ġin Ġmodule . source Roots ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV fs Util Core . process Files Re cursively ( source Root ) Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . isDirectory ) Ġreturn @ process Files Re cursively Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Source Kt File Ġ= ĠPsi Manager . getInstance ( project ). find File ( file ) Ġas ĠK t File ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck File ( temp Source Kt File , Ġtemp Source Kt File . find Corre sponding File In Test Dir ( source Root , Ġtest Root )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠK t File . find Corre sponding File In Test Dir ( containing Root : ĠVirtual File , Ġtest Dir : ĠFile ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemp RootPath Ġ= ĠPaths . get ( containing Root . path ) ĊĠĠĠĠĠĠĠ Ġval Ġtemp Project DirPath Ġ= Ġtemp RootPath . parent ĊĠĠĠĠĠĠĠ Ġval Ġtemp Source Path Ġ= ĠPaths . get ( this . virtual FilePath ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrelative To Project RootPath Ġ= Ġtemp Project DirPath . rel ativ ize ( temp Source Path ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Sources Project DirPath Ġ= Ġtest Dir . to Path () ĊĠĠĠĠĠĠĠ Ġval Ġtest Source Path Ġ= Ġtest Sources Project DirPath . resolve ( relative To Project RootPath ) ĊĊĠĠĠĠĠĠĠ Ġrequire ( test Source Path . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Can 't Ġfind Ġfile Ġin Ġtest data Ġfor Ġcopied Ġfile Ġ$ this : Ġchecked Ġat Ġpath Ġ${ test Source Path . to AbsolutePath () }" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtest Source Path . to File () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġcheck File ( file : ĠK t File , Ġexpected File : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresolution Facade Ġ= Ġfile . get Resolution Facade () ĊĠĠĠĠĠĠĠ Ġval Ġ( binding Context , Ġmodule Descriptor ) Ġ= Ġresolution Facade . analyze With All Compiler Checks ( listOf ( file )) ĊĊĠĠĠĠĠĠĠ Ġval Ġdirectives Ġ= ĠKotlin TestUtils . parse Directives ( file . text ) ĊĠĠĠĠĠĠĠ Ġval Ġdiagnostics Filter Ġ= Ġparse Diagnostic Filter Directive ( directives , Ġallow Un ders core Usage Ġ= Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Diagnostics Ġ= ĠCheck er TestUtil . get Diagnostics In cluding Syntax Errors ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmark Dynamic Calls Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdynamic Call Descriptors Ġ= Ġmutable ListOf (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration Ġ= ĠDi agnostics Rendering Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplatform Ġ= Ġnull , Ġ// Ġwe Ġdon 't Ġneed Ġto Ġattach Ġplatform - description Ġstring Ġto Ġdiagnostic Ġhere ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith New Inference Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage Version Settings Ġ= Ġresolution Facade . get Language Version Settings (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Flow Value Factory Ġ= Ġresolution Facade . getData Flow Value Factory (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Descriptor Ġ= Ġmodule Descriptor Ġas ĠModule Descriptor Impl ĊĠĠĠĠĠĠĠ Ġ). filter Ġ{ Ġdiagnostics Filter . value ( it . diagnostic ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Text With Diagnostics Ġ= ĠCheck er TestUtil . add Diagnostic Markers ToText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual Diagnostics , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostic To Expected Diagnostic Ġ= Ġempty Map (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetFile Text Ġ= Ġ{ Ġit . text Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunchecked Diagnostics Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith New Inference Directive Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Diagnostic Messages Ġ= Ġdirectives . contains ( RENDER _ DIAG NO ST ICS _ MESSAGES ) ĊĠĠĠĠĠĠĠ Ġ). toString () ĊĊĠĠĠĠĠĠĠ ĠKotlin TestUtils . assertEquals ToFile ( expected File , Ġactual Text With Diagnostics ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDI AG NO ST ICS _ DIRECT IVE Ġ= Ġ" DIAG NO ST ICS " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠR ENDER _ DIAG NO ST ICS _ MESSAGES Ġ= Ġ" RENDER _ DIAG NO ST ICS _ MESSAGES " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDI AG NO ST ICS _ PATTERN : ĠPattern Ġ= ĠPattern . compile (" ([ + \\ - ! ]) (\\ w +) \\ s * ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDI AG NO ST ICS _ TO _ INCLUDE _ AN YW AY : ĠSet < Diagnostic Factory <* >> Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . UN RESOL VED _ REFERENCE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . UN RESOL VED _ REFERENCE _ WRONG _ RECE IVER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSyntax Error Diagnostic Factory . INSTANCE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDebug Info Diagnostic Factory 0 . ELEMENT _ WITH _ ERROR _ TYPE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDebug Info Diagnostic Factory 0 . MISSING _ UN RESOL VED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDebug Info Diagnostic Factory 0 . UN RESOL VED _ WITH _ TARGET ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġparse Diagnostic Filter Directive ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirective Map : ĠDirect ives , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Un ders core Usage : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ): ĠCondition < Diagnostic > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirectives Ġ= Ġdirective Map [ DIAG NO ST ICS _ DIRECT IVE ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Condition Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( allow Un ders core Usage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCondition < Diagnostic > Ġ{ Ġit . factory . name Ġ!= Ġ" UNDER SCORE _ USAGE _ WITHOUT _ BACK T IC KS " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConditions . always True () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( directives Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġ"! API _ VERSION " Ġis Ġpresent , Ġdisable Ġthe ĠNE WER _ VERSION _ IN _ SIN CE _ K OT LIN Ġdiagnostic . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOtherwise Ġit Ġwould Ġbe Ġreported Ġin Ġany Ġnon - trivial Ġtest Ġon Ġthe Ġ@ Since Kotlin Ġvalue . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( API _ VERSION _ DIRECT IVE Ġin Ġdirective Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠConditions . and ( initial Condition , ĠCondition Ġ{ Ġdiagnostic Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostic . factory Ġ!== ĠErrors . NEW ER _ VERSION _ IN _ SIN CE _ K OT LIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinitial Condition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcondition Ġ= Ġinitial Condition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= ĠDI AG NO ST ICS _ PATTERN . matcher ( directives ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Wrong Ġsyntax Ġin Ġthe Ġ'// Ġ!$ DIAG NO ST ICS _ DIRECT IVE : Ġ... ' Ġdirective :\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" found : Ġ'$ directives '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Must Ġbe Ġ' ([ +- !] DIAG NO ST IC _ FACTORY _ NAME | ERROR | WARNING | INFO )+' \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" where Ġ'+' Ġmeans Ġ' include '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠ Ġ'-' Ġmeans Ġ' exclude '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠ Ġ' !' Ġmeans Ġ' exclude Ġeverything Ġbut Ġthis '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" directives Ġare Ġapplied Ġin Ġthe Ġorder Ġof Ġappearance , Ġi . e . Ġ! FOO Ġ+ BAR Ġmeans Ġinclude Ġonly ĠF OO Ġand ĠBAR " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfirst Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperation Ġ= Ġmatcher . group ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġmatcher . group ( 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Condition : ĠCondition < Diagnostic > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name Ġin Ġset Of (" ERROR ", Ġ" WARNING ", Ġ" INFO ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCondition Ġ{ Ġdiagnostic Ġ-> Ġdiagnostic . severity Ġ== ĠSeverity . valueOf ( name ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCondition Ġ{ Ġdiagnostic Ġ-> Ġname Ġ== Ġdiagnostic . factory . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( operation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" !" Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! first ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . fail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"' $ operation $ name ' Ġappears Ġin Ġa Ġposition Ġrather Ġthan Ġthe Ġfirst Ġone , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" which Ġeffectively Ġcancel s Ġall Ġthe Ġprevious Ġfilters Ġin Ġthis Ġdirective " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcondition Ġ= Ġnew Condition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" +" Ġ-> Ġcondition Ġ= ĠConditions . or ( condition , Ġnew Condition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-" Ġ-> Ġcondition Ġ= ĠConditions . and ( condition , ĠConditions . not ( new Condition )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( matcher . find ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġalways Ġinclude ĠUN RESOL VED _ REFERENCE Ġand ĠSY NTAX _ ERROR Ġbecause Ġthey Ġare Ġtoo Ġlikely Ġto Ġindicate Ġerr one ous Ġtest Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠConditions . or ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcondition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCondition Ġ{ Ġdiagnostic Ġ-> Ġdiagnostic . factory Ġin ĠDI AG NO ST ICS _ TO _ INCLUDE _ AN YW AY Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ abstract Ġclass ĠAbstract Multi platform Analysis Test Ġ: ĠAbstract Diagnostic Code Meta Info Test () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget TestData Directory () Ġ= ĠIDEA _ TEST _ DATA _ DIR . resolve (" multi platform ") ĊĊĠĠĠ Ġoverride Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setUp () ĊĠĠĠĠĠĠĠ ĠKotlin Multi platform Analysis Mode Component . set Mode ( project , ĠKotlin Multi platform Analysis Mode Component . Mode . COMP OS ITE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun All ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThrowable Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Multi platform Analysis Mode Component . set Mode ( project , ĠKotlin Multi platform Analysis Mode Component . Mode . SEPAR ATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThrowable Runnable Ġ{ Ġsuper . te ar Down () Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ