/* Ċ Ġ* Ġ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 . tree . de serializer Ċ Ċ import Ġkotlinx . metadata . Km Module Fragment Ċ import Ġorg . jetbrains . kotlin . common izer . cir . C ir Package Ċ import Ġorg . jetbrains . kotlin . common izer . cir . C ir PackageName Ċ import Ġorg . jetbrains . kotlin . common izer . metadata . C ir Type Resolver Ċ import Ġorg . jetbrains . kotlin . common izer . tree . C ir Tree Package Ċ Ċ internal Ġclass ĠC ir Tree Package Deserializer ( ĊĠĠĠ Ġprivate Ġval Ġproperty Deserializer : ĠC ir Tree Property Deserializer , ĊĠĠĠ Ġprivate Ġval Ġfunction Deserializer : ĠC ir Tree Function Deserializer , ĊĠĠĠ Ġprivate Ġval Ġtype Alias Deserializer : ĠC ir Tree Type Alias Deserializer , ĊĠĠĠ Ġprivate Ġval Ġclass Deserializer : ĠC ir Tree Class Deserializer , Ċ ) Ġ{ ĊĠĠĠ Ġoperator Ġfun Ġinvoke ( ĊĠĠĠĠĠĠĠ ĠpackageName : ĠC ir PackageName , ĊĠĠĠĠĠĠĠ Ġfragments : ĠCollection < Km Module Fragment >, ĊĠĠĠĠĠĠĠ Ġtype Resolver : ĠC ir Type Resolver ĊĠĠĠ Ġ): ĠC ir Tree Package Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpkg Ġ= ĠC ir Package . create ( packageName ) ĊĊĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= Ġfragments . as Sequence (). map NotNull Ġ{ Ġit . pkg Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . properties Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġproperty Ġ-> Ġproperty Deserializer ( property , Ġnull , Ġtype Resolver ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĊĠĠĠĠĠĠĠ Ġval Ġfunctions Ġ= Ġfragments . as Sequence (). map NotNull Ġ{ Ġit . pkg Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . functions Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġfunction Ġ-> Ġfunction Deserializer ( function , Ġnull , Ġtype Resolver ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Aliases Ġ= Ġfragments . as Sequence (). map NotNull Ġ{ Ġit . pkg Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . type Aliases Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġtype Alias Ġ-> Ġtype Alias Deserializer ( type Alias , Ġpkg . packageName , Ġtype Resolver ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĊĠĠĠĠĠĠĠ Ġval Ġclasses Ġ= ĠClasses To Process () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġfragments . forEach Ġ{ Ġfragment Ġ-> Ġadd Classes From Fragment ( fragment ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run Ġ{ Ġclasses In Scope ( parent Class Id Ġ= Ġnull ). map Ġ{ Ġclass Entry Ġ-> Ġclass Deserializer ( class Entry , Ġthis , Ġtype Resolver ) Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠC ir Tree Package ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpkg Ġ= Ġpkg , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperties Ġ= Ġproperties , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunctions Ġ= Ġfunctions , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Aliases Ġ= Ġtype Aliases , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclasses Ġ= Ġclasses ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ