/* Ċ Ġ* Ġ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 . descriptors . common izer Ċ Ċ import Ġkotlinx . metadata . k lib . Chunk ed K lib Module Fragment Write Strategy Ċ import Ġorg . jetbrains . kotlin . descriptors . common izer . Results Consumer . Module Result Ċ import Ġorg . jetbrains . kotlin . descriptors . common izer . Results Consumer . Status Ċ import Ġorg . jetbrains . kotlin . descriptors . common izer . core . Common ization Visitor Ċ import Ġorg . jetbrains . kotlin . descriptors . common izer . merge dt ree .* Ċ import Ġorg . jetbrains . kotlin . descriptors . common izer . merge dt ree . C ir Node . Companion . dimension Ċ import Ġorg . jetbrains . kotlin . descriptors . common izer . merge dt ree . C ir Tree Mer ger . C ir Tree Merge Result Ċ import Ġorg . jetbrains . kotlin . descriptors . common izer . metadata . Metadata Builder Ċ import Ġorg . jetbrains . kotlin . library . Serialized Metadata Ċ import Ġorg . jetbrains . kotlin . storage . Lock Based Storage Manager Ċ import Ġorg . jetbrains . kotlin . storage . Storage Manager Ċ Ċ fun Ġrun Common ization ( parameters : ĠCommon izer Parameters ) Ġ{ ĊĠĠĠ Ġif Ġ(! parameters . has Anything To Common ize ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġparameters . results Consumer . all Cons umed ( Status . NOTH ING _ TO _ DO ) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġstorage Manager Ġ= ĠLock Based Storage Manager (" Declarations Ġcommon ization ") ĊĊĠĠĠ Ġval Ġmerge Result Ġ= Ġmerge And Common ize ( storage Manager , Ġparameters ) ĊĠĠĠ Ġval Ġmerged Tree Ġ= Ġmerge Result . root ĊĊĠĠĠ Ġ// Ġbuild Ġresulting Ġdeclarations : ĊĠĠĠ Ġfor Ġ( target Index Ġin Ġ 0 Ġuntil Ġmerged Tree . dimension ) Ġ{ ĊĠĠĠĠĠĠĠ Ġserialize Target ( merge Result , Ġtarget Index , Ġparameters ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġparameters . results Consumer . all Cons umed ( Status . DONE ) Ċ } Ċ Ċ private Ġfun Ġmerge And Common ize ( storage Manager : ĠStorage Manager , Ġparameters : ĠCommon izer Parameters ): ĠC ir Tree Merge Result Ġ{ ĊĠĠĠ Ġ// Ġbuild Ġmerged Ġtree : ĊĠĠĠ Ġval Ġclassifiers Ġ= ĠC ir Known Class ifiers ( ĊĠĠĠĠĠĠĠ Ġcommon ized Ġ= ĠC ir Common ized Class ifiers . default (), ĊĠĠĠĠĠĠĠ Ġforward Declarations Ġ= ĠC ir Forward Declarations . default (), ĊĠĠĠĠĠĠĠ Ġdependencies Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfor Ġnow , Ġsupply Ġonly Ġcommon Ġdependency Ġlibraries Ġ( ex : ĠKotlin Ġstdlib ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . shared Target Ġto ĠC ir Provided Class ifiers . from Modules ( storage Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . dependency Modules Provider ?. load Modules ( emptyList ()) ?. values . or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġmerge Result Ġ= ĠC ir Tree Mer ger ( storage Manager , Ġclassifiers , Ġparameters ). merge () ĊĊĠĠĠ Ġ// Ġcommon ize : ĊĠĠĠ Ġval Ġmerged Tree Ġ= Ġmerge Result . root ĊĠĠĠ Ġmerged Tree . accept ( Common ization Visitor ( class ifiers , Ġmerged Tree ), ĠUnit ) ĊĠĠĠ Ġparameters . progress Logger ?. invoke (" Common ized Ġdeclarations ") ĊĊĠĠĠ Ġreturn Ġmerge Result Ċ } Ċ Ċ private Ġfun Ġserialize Target ( merge Result : ĠC ir Tree Merge Result , Ġtarget Index : ĠInt , Ġparameters : ĠCommon izer Parameters ) Ġ{ ĊĠĠĠ Ġval Ġmerged Tree Ġ= Ġmerge Result . root ĊĠĠĠ Ġval Ġtarget Ġ= Ġmerged Tree . getTarget ( target Index ) ĊĊĠĠĠ ĠMetadata Builder . build ( merged Tree , Ġtarget Index , Ġparameters . stats Collector ) Ġ{ Ġmetadata Module Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġlibrary Name Ġ= Ġmetadata Module . name ĊĠĠĠĠĠĠĠ Ġval Ġserialized Metadata Ġ= Ġwith ( metadata Module . write ( K LIB _ FRAGMENT _ WRITE _ STR ATE GY )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSerialized Metadata ( header , Ġfragments , Ġfragment Names ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġparameters . results Consumer . consume ( target , ĠModule Result . Common ized ( library Name , Ġserialized Metadata )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( target Ġis ĠLeaf Target ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmerge Result . missing Module Infos . getValue ( target ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . results Consumer . consume ( target , ĠModule Result . Missing ( it . original Location )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġparameters . results Consumer . target Cons umed ( target ) Ċ } Ċ Ċ private Ġval ĠK LIB _ FRAGMENT _ WRITE _ STR ATE GY Ġ= ĠChunk ed K lib Module Fragment Write Strategy () Ċ