/* Ċ Ġ* Ġ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 . test . services . configuration Ċ Ċ import Ġorg . jetbrains . kotlin . cli . jvm . config . add Jvm Classpath Roots Ċ import Ġorg . jetbrains . kotlin . codegen . Code gen TestUtil Ċ import Ġorg . jetbrains . kotlin . codegen . for Test Compile . For Test Compile Runtime Ċ import Ġorg . jetbrains . kotlin . config . Analysis Flag Ċ import Ġorg . jetbrains . kotlin . config . Compiler Configuration Ċ import Ġorg . jetbrains . kotlin . config . Jvm Analysis Flags Ċ import Ġorg . jetbrains . kotlin . test . Mock Library Util Ċ import Ġorg . jetbrains . kotlin . test . directives . Foreign Annotations Directives Ċ import Ġorg . jetbrains . kotlin . test . directives . Foreign Annotations Directives . JS PEC IFY _ STATE Ċ import Ġorg . jetbrains . kotlin . test . directives . Foreign Annotations Directives . JS R 3 0 5 _ GLOBAL _ REPORT Ċ import Ġorg . jetbrains . kotlin . test . directives . Foreign Annotations Directives . JS R 3 0 5 _ M IG RATION _ REPORT Ċ import Ġorg . jetbrains . kotlin . test . directives . Foreign Annotations Directives . JS R 3 0 5 _ SPECIAL _ REPORT Ċ import Ġorg . jetbrains . kotlin . test . directives . model . Directives Container Ċ import Ġorg . jetbrains . kotlin . test . directives . model . Registered Directives Ċ import Ġorg . jetbrains . kotlin . test . directives . model . single Or Zero Value Ċ import Ġorg . jetbrains . kotlin . test . model . Test Module Ċ import Ġorg . jetbrains . kotlin . test . services .* Ċ import Ġorg . jetbrains . kotlin . utils . Java Type En hancement State Ċ import Ġorg . jetbrains . kotlin . utils . Report Level Ċ import Ġjava . io . File Ċ Ċ enum Ġclass ĠJ dk Foreign Annotation Type ( val Ġpath : ĠString ) Ġ{ ĊĠĠĠ ĠAn notations (" third - party / annotations "), ĊĠĠĠ ĠJ dk 8 Annotations (" third - party / jdk 8 - annotations "); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠFOREIGN _ AN NOT ATIONS _ SOURCES _ PATH Ġ= ĠAn notations . path ĊĠĠĠĠĠĠĠ Ġval ĠFOREIGN _ JDK 8 _ AN NOT ATIONS _ SOURCES _ PATH Ġ= ĠJ dk 8 Annotations . path ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠJ vm Foreign Annotations Configurator ( test Services : ĠTest Services ) Ġ: ĠEnvironment Configurator ( test Services ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTEST _ AN NOT ATIONS _ SOURCE _ PATH Ġ= Ġ" compiler / testData / foreign Annotations / test Annotations " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġdirectives Containers : ĠList < Directives Container > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠlistOf ( Foreign Annotations Directives ) ĊĊĠĠĠ Ġ@ Opt In ( Experimental Std lib Api :: class ) ĊĠĠĠ Ġoverride Ġfun Ġconfigure Compiler Configuration ( configuration : ĠCompiler Configuration , Ġmodule : ĠTest Module ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġextra Class Path Ġ= Ġbuild List Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġforeign Annotations Ġ= Ġcreate Jar With Foreign Annotations ( module ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( foreign Annotations ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( compile Test Annotations ( foreign Annotations )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġconfiguration . add Jvm Classpath Roots ( extra Class Path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġcreate Jar With Foreign Annotations ( module : ĠTest Module ): ĠList < File > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdirective Ġ= ĠForeign Annotations Directives . AN NOT ATIONS _ PATH ĊĠĠĠĠĠĠĠ Ġval Ġannotations Path Ġ= Ġmodule . directives . single Or Zero Value ( directive ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror ("${ directive . name } Ġshould Ġbe Ġspecified Ġin Ġtest Ġor Ġtest Ġrunner ") ĊĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Library Util . compile Java Files Library To Jar ( annotations Path , Ġ" foreign - annotations ", Ġassertions Ġ= ĠJ Unit 5 Assertions ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFor Test Compile Runtime . jvm Annotations For Tests () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġcompile Test Annotations ( extra Class Path : ĠList < File >): ĠList < File > Ġ= ĊĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Library Util . compile Java Files Library To Jar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTEST _ AN NOT ATIONS _ SOURCE _ PATH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" test - foreign - annotations ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextra Options Ġ= ĠlistOf ("- X allow - kotlin - package "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextra Classpath Ġ= Ġextra Class Path . map Ġ{ Ġit . path Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassertions Ġ= ĠJ Unit 5 Assertions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġprovide Additional Analysis Flags ( directives : ĠRegistered Directives ): ĠMap < Analysis Flag <* >, ĠAny ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġglobal State Ġ= Ġdirectives . single Or Zero Value ( JS R 3 0 5 _ GLOBAL _ REPORT ) Ġ?: ĠReport Level . STRICT ĊĠĠĠĠĠĠĠ Ġval Ġmigration State Ġ= Ġdirectives . single Or Zero Value ( JS R 3 0 5 _ M IG RATION _ REPORT ) ĊĠĠĠĠĠĠĠ Ġval Ġuser Annotations State Ġ= Ġdirectives [ JS R 3 0 5 _ SPECIAL _ REPORT ]. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( name , Ġstate Description ) Ġ= Ġit . split (": "). take If Ġ{ Ġit . size Ġ== Ġ 2 Ġ} Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠReport Level . findBy Description ( state Description ) Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġto Ġstate ĊĠĠĠĠĠĠĠ Ġ}. toMap () ĊĠĠĠĠĠĠĠ Ġval Ġj Specify Report Level Ġ= Ġdirectives . single Or Zero Value ( JS PEC IFY _ STATE ) Ġ?: ĠReport Level . STRICT ĊĠĠĠĠĠĠĠ Ġreturn Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJ vm Analysis Flags . java Type En hancement State Ġto ĠJava Type En hancement State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglobal State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmigration State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Annotations State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj specify Report Level Ġ= Ġj Specify Report Level ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠJ vm Foreign Annotations Again st Compiled Java Configurator ( test Services : ĠTest Services ) Ġ: ĠJ vm Foreign Annotations Configurator ( test Services ) Ġ{ ĊĠĠĠ Ġ@ Opt In ( Experimental Std lib Api :: class ) ĊĠĠĠ Ġoverride Ġfun Ġconfigure Compiler Configuration ( configuration : ĠCompiler Configuration , Ġmodule : ĠTest Module ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcompiled Java Path Ġ= Ġtest Services . create Temp Directory (" java - compiled - files ") ĊĊĠĠĠĠĠĠĠ Ġval Ġforeign Annotations Ġ= Ġcreate Jar With Foreign Annotations ( module ) ĊĠĠĠĠĠĠĠ Ġval Ġtest Annotations Ġ= Ġcompile Test Annotations ( foreign Annotations ) ĊĠĠĠĠĠĠĠ Ġval Ġadditional Classpath Ġ= Ġbuild List Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( foreign Annotations ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( test Annotations ) ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġit . path Ġ} ĊĊĠĠĠĠĠĠĠ Ġmodule . java Files . forEach Ġ{ Ġtest Services . source File Provider . get Real File For SourceFile ( it ) Ġ} ĊĠĠĠĠĠĠĠ ĠCode gen TestUtil . compile Java ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCode gen TestUtil . find Java Sources In Directory ( test Services . source File Provider . java Source Directory ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Classpath , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompiled Java Path , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJ Unit 5 Assertions ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġextra Class Path Ġ= Ġbuild List Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( compiled Java Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( test Annotations ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconfiguration . add Jvm Classpath Roots ( extra Class Path ) ĊĠĠĠ Ġ} Ċ } Ċ