/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 5 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . builtins Ċ Ċ import Ġorg . jetbrains . kotlin . descriptors . Package Fragment Provider Ċ import Ġorg . jetbrains . kotlin . name . Class Id Ċ import Ġorg . jetbrains . kotlin . serialization . Class Data Ċ import Ġorg . jetbrains . kotlin . serialization . Proto Buf Ċ import Ġorg . jetbrains . kotlin . serialization . de serialization . Class Data Finder Ċ import Ġjava . io . InputStream Ċ Ċ public Ġclass ĠBuilt Ins Class Data Finder ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpackage Fragment Provider : ĠPackage Fragment Provider , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġload Resource : Ġ( path : ĠString ) Ġ-> ĠInputStream ? Ċ ) Ġ: ĠClass Data Finder Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġfind Class Data ( class Id : ĠClass Id ): ĠClass Data ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpackage Fragment Ġ= Ġpackage Fragment Provider . get Package Fragments ( class Id . get Package Fq Name ()). single OrNull () Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġload Resource ( Built Ins Serialization Util . getClass Metadata Path ( class Id )) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġclass Proto Ġ= ĠProto Buf . Class . parseFrom ( stream , ĠBuilt Ins Serialization Util . EXTENSION _ REGISTRY ) ĊĠĠĠĠĠĠĠ Ġval Ġname Resolver Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( package Fragment Ġas ? ĠBuilt ins Package Fragment Ġ?: Ġerror (" Not Ġa Ġbuilt - in Ġpackage Ġfragment : Ġ$ package Fragment ")). name Resolver ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected ShortName Ġ= Ġclass Id . get Short ClassName () ĊĠĠĠĠĠĠĠ Ġval Ġactual ShortName Ġ= Ġname Resolver . getClass Id ( class Proto . getF q Name ()). get Short ClassName () ĊĠĠĠĠĠĠĠ Ġif Ġ(! actual ShortName . is Special () Ġ&& Ġactual ShortName Ġ!= Ġexpected ShortName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWork around Ġfor Ġcase - ins ensitive Ġfile Ġsystems , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġotherwise Ġwe 'd Ġfind Ġ" Collection " Ġfor Ġ" collection " Ġetc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠClass Data ( name Resolver , Ġclass Proto ) ĊĠĠĠ Ġ} Ċ } Ċ