/* Ċ Ġ* Ġ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 . common izer . utils Ċ Ċ import Ġorg . intellij . lang . annotations . Language Ċ import Ġorg . jetbrains . kotlin . common izer . Abstract Inline Sources Common ization Test . Inline Sources Common ization Test Dsl Ċ import Ġorg . jetbrains . kotlin . common izer . Modules Provider Ċ import Ġorg . jetbrains . kotlin . common izer . merge dt ree . C ir Provided Class ifiers Ċ import Ġorg . jetbrains . kotlin . common izer . merge dt ree . C ir Provided Class ifiers By Modules Ċ import Ġorg . jetbrains . kotlin . common izer . tree . C ir Tree Module Ċ import Ġorg . jetbrains . kotlin . common izer . tree . C ir Tree Root Ċ import Ġorg . jetbrains . kotlin . descriptors . Module Descriptor Ċ import Ġorg . jetbrains . kotlin . library . Serialized Metadata Ċ import Ġjava . io . File Ċ Ċ interface ĠInline Source Builder Ġ{ ĊĠĠĠ Ġannotation Ġclass ĠModule Builder Dsl ĊĊĠĠĠ Ġdata Ġclass ĠSource File ( val Ġname : ĠString , Ġ@ Language (" kotlin ") Ġval Ġcontent : ĠString ) ĊĊĠĠĠ Ġdata Ġclass ĠModule ( ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString , Ġval Ġsource Files : ĠList < SourceFile >, Ġval Ġdependencies : ĠList < Module > ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Inline Sources Common ization Test Dsl ĊĠĠĠ Ġ@ Module Builder Dsl ĊĠĠĠ Ġclass ĠModule Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġname : ĠString Ġ= Ġ" test - module " ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġsource Files : ĠList < SourceFile > Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġdependencies : ĠList < Module > Ġ= Ġempty List () ĊĊĊĠĠĠĠĠĠĠ Ġ@ Inline Sources Common ization Test Dsl ĊĠĠĠĠĠĠĠ Ġ@ Module Builder Dsl ĊĠĠĠĠĠĠĠ Ġfun Ġsource (@ Language (" kotlin ") Ġcontent : ĠString , Ġname : ĠString Ġ= Ġ" test . kt ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Files Ġ= Ġsource Files Ġ+ ĠSource File ( name , Ġcontent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Inline Sources Common ization Test Dsl ĊĠĠĠĠĠĠĠ Ġ@ Module Builder Dsl ĊĠĠĠĠĠĠĠ Ġfun Ġdependency ( builder : ĠModule Builder . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdependency ( Module Builder (). also ( builder ). build ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Inline Sources Common ization Test Dsl ĊĠĠĠĠĠĠĠ Ġ@ Module Builder Dsl ĊĠĠĠĠĠĠĠ Ġfun Ġdependency ( module : ĠModule ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dependencies Ġ+= Ġmodule . copy ( name Ġ= Ġ"${ this . name }- dependency -${ module . name }-${ dependencies . size }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠModule Ġ= ĠModule ( name , Ġsource Files . toList (), Ġdependencies . toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Module ( builder : ĠModule Builder . () Ġ-> ĠUnit ): ĠModule Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠModule Builder (). also ( builder ). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate C ir Tree From Source Code (@ Language (" kotlin ") Ġsource Code : ĠString ): ĠC ir Tree Module Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate C ir Tree Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource ( content Ġ= Ġsource Code , Ġ" test . kt ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġcreate C ir Tree ( module : ĠModule ): ĠC ir Tree Module ĊĊĠĠĠ Ġfun Ġcreate Module Descriptor ( module : ĠModule ): ĠModule Descriptor ĊĊĠĠĠ Ġfun Ġcreate Metadata ( module : ĠModule ): ĠSerialized Metadata Ġ= Ġcreate Module Descriptor ( module ). to Metadata () Ċ } ĊĊ Ċ @ Inline Source Builder . Module Builder Dsl Ċ fun ĠInline Source Builder . create C ir Tree ( builder : ĠInline Source Builder . Module Builder . () Ġ-> ĠUnit ): ĠC ir Tree Module Ġ{ ĊĠĠĠ Ġreturn Ġcreate C ir Tree ( create Module ( builder )) Ċ } Ċ Ċ @ Inline Source Builder . Module Builder Dsl Ċ fun ĠInline Source Builder . create Module Descriptor ( builder : ĠInline Source Builder . Module Builder . () Ġ-> ĠUnit ): ĠModule Descriptor Ġ{ ĊĠĠĠ Ġreturn Ġcreate Module Descriptor ( create Module ( builder )) Ċ } Ċ Ċ @ Inline Source Builder . Module Builder Dsl Ċ fun ĠInline Source Builder . create Metadata ( builder : ĠInline Source Builder . Module Builder . () Ġ-> ĠUnit ): ĠSerialized Metadata Ġ{ ĊĠĠĠ Ġreturn Ġcreate Metadata ( create Module ( builder )) Ċ } Ċ Ċ @ Inline Source Builder . Module Builder Dsl Ċ fun ĠInline Source Builder . create C ir Tree Root ( builder : ĠInline Source Builder . Module Builder . () Ġ-> ĠUnit ): ĠC ir Tree Root Ġ{ ĊĠĠĠ Ġreturn ĠC ir Tree Root ( listOf ( create C ir Tree ( builder ))) Ċ } ĊĊ Ċ @ Inline Source Builder . Module Builder Dsl Ċ fun ĠInline Source Builder . create C ir Tree Root From Source Code (@ Language (" kotlin ") Ġsource Code : ĠString ): ĠC ir Tree Root Ġ{ ĊĠĠĠ Ġreturn ĠC ir Tree Root ( listOf ( create C ir Tree From Source Code ( sourceCode ))) Ċ } Ċ Ċ @ Inline Source Builder . Module Builder Dsl Ċ fun ĠInline Source Builder . create C ir Provided Class ifiers ( module : ĠInline Source Builder . Module ): ĠC ir Provided Class ifiers Ġ{ ĊĠĠĠ Ġval Ġmodules Provider Ġ= Ġobject Ġ: ĠModules Provider Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġmodule Infos : ĠCollection < Modules Provider . Module Info > Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModules Provider . Module Info ( name Ġ= Ġ" C ir Provided For Test ", Ġc Interop Attributes Ġ= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload Module Metadata ( name : ĠString ): ĠSerialized Metadata Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name Ġ== Ġmodule Infos . single (). name ) Ġreturn Ġcreate Metadata ( module ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġerror (" Unknown ĠModule Ġ$ name ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠC ir Provided Class ifiers By Modules . load ( modules Provider ) Ċ } Ċ Ċ @ Inline Source Builder . Module Builder Dsl Ċ fun ĠInline Source Builder . create C ir Provided Class ifiers ( builder : ĠInline Source Builder . Module Builder . () Ġ-> ĠUnit ): ĠC ir Provided Class ifiers Ġ{ ĊĠĠĠ Ġreturn Ġcreate C ir Provided Class ifiers ( create Module Ġ{ Ġbuilder () Ġ}) Ċ } Ċ Ċ @ Inline Source Builder . Module Builder Dsl Ċ fun ĠInline Source Builder . create C ir Provided Class ifiers From Source Code (@ Language (" kotlin ") Ġsource Code : ĠString ): ĠC ir Provided Class ifiers Ġ{ ĊĠĠĠ Ġreturn Ġcreate C ir Provided Class ifiers ( create Module Ġ{ Ġsource ( sourceCode ) Ġ}) Ċ } Ċ