/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 9 Ġ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 . script ing . dependencies Ċ Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġorg . jetbrains . kotlin . cli . common . config . Kotlin Source Root Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Compiler Message Location Ċ import Ġorg . jetbrains . kotlin . cli . jvm . compiler . create Source Files From Source Roots Ċ import Ġorg . jetbrains . kotlin . config . Compiler Configuration Ċ import Ġorg . jetbrains . kotlin . psi . Kt File Ċ import Ġorg . jetbrains . kotlin . script ing . definitions . Script Dependencies Provider Ċ import Ġjava . io . File Ċ Ċ data Ġclass ĠScripts Compilation Dependencies ( ĊĠĠĠ Ġval Ġclasspath : ĠList < File >, ĊĠĠĠ Ġval Ġsources : ĠList < Kt File >, ĊĠĠĠ Ġval Ġsource Dependencies : ĠList < Source Dependencies > Ċ ) Ġ{ ĊĠĠĠ Ġdata Ġclass ĠSource Dependencies ( ĊĠĠĠĠĠĠĠ Ġval Ġscript File : ĠK t File , ĊĠĠĠĠĠĠĠ Ġval Ġsource Dependencies : ĠList < Kt File > ĊĠĠĠ Ġ) Ċ } Ċ Ċ // Ġrecursively Ġcollect Ġdependencies Ġfrom Ġinitial Ġand Ġimported Ġscripts Ċ fun Ġcollect Scripts Compilation Dependencies ( ĊĠĠĠ Ġconfiguration : ĠCompiler Configuration , ĊĠĠĠ Ġproject : ĠProject , ĊĠĠĠ Ġinitial Sources : ĠIterable < Kt File > Ċ ): ĠScripts Compilation Dependencies Ġ{ ĊĠĠĠ Ġval Ġcollected Class Path Ġ= ĠArrayList < File >() ĊĠĠĠ Ġval Ġcollected Sources Ġ= ĠArrayList < Kt File >() ĊĠĠĠ Ġval Ġcollected Source Dependencies Ġ= ĠArrayList < Scripts Compilation Dependencies . Source Dependencies >() ĊĠĠĠ Ġvar Ġremaining Sources Ġ= Ġinitial Sources ĊĠĠĠ Ġval Ġknown Source Paths Ġ= Ġinitial Sources . map NotNull To ( HashSet ()) Ġ{ Ġit . virtual File ?. path Ġ} ĊĠĠĠ Ġval Ġimports Provider Ġ= ĠScript Dependencies Provider . getInstance ( project ) ĊĠĠĠ Ġif Ġ( imports Provider Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Remaining Sources Ġ= ĠArrayList < Kt File >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( source Ġin Ġremaining Sources ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdependencies Ġ= Ġimports Provider . get Script Dependencies ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dependencies Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollected Class Path . addAll ( dependencies . classpath ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Dependencies Roots Ġ= Ġdependencies . scripts . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Source Root ( it . path , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Dependencies Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Source Files From Source Roots ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration , Ġproject , Ġsource Dependencies Roots , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġconsider Ġreceiving Ġand Ġusing Ġprecise Ġlocation Ġfrom Ġthe Ġresolver Ġin Ġthe Ġfuture ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . virtual File ?. path ?. let Ġ{ ĠCompiler Message Location . create ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( source Dependencies . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollected Source Dependencies . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScripts Compilation Dependencies . Source Dependencies ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Dependencies ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Sources Ġ= Ġsource Dependencies . filter Not Ġ{ Ġknown Source Paths . contains ( it . virtual File . path ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( new Source Ġin Ġnew Sources ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollected Sources . add ( new Source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Remaining Sources . add ( new Source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġknown Source Paths . add ( new Source . virtual File . path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Remaining Sources . isEmpty ()) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Sources Ġ= Ġnew Remaining Sources ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠScripts Compilation Dependencies ( ĊĠĠĠĠĠĠĠ Ġcollected Class Path . distinct By Ġ{ Ġit . absolute Path Ġ}, ĊĠĠĠĠĠĠĠ Ġcollected Sources , ĊĠĠĠĠĠĠĠ Ġcollected Source Dependencies ĊĠĠĠ Ġ) Ċ }