/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 Ġ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 . serialization Ċ Ċ import Ġorg . jetbrains . kotlin . descriptors .* Ċ import Ġorg . jetbrains . kotlin . descriptors . impl . Function Descriptor Impl Ċ import Ġorg . jetbrains . kotlin . descriptors . impl . Module Descriptor Impl Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . resolve . descriptor Util . fq Name Safe Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . Descriptor Kind Filter Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . Descriptor Kind Filter . Companion . CLAS SI FI ERS _ MASK Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . Descriptor Kind Filter . Companion . FUNCTION S _ MASK Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . Member Scope Ċ import Ġorg . jetbrains . kotlin . test . K lib TestUtil Ċ import Ġorg . jetbrains . kotlin . test . TestCase With Tmp dir Ċ import Ġorg . jetbrains . kotlin . utils . addTo Std lib . assert ed Cast Ċ import Ġorg . jetbrains . kotlin . utils . always True Ċ import Ġjava . io . File Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠNon Stable Parameter Names Serialization Test Ġ: ĠTestCase With Tmp dir () Ġ{ ĊĠĠĠ Ġfun Ġtest Non Stable Parameter Names () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoriginal K lib Name Ġ= ĠFile ( SOURCE _ FILE ). name Without Extension ĊĠĠĠĠĠĠĠ Ġval Ġoriginal K lib File Ġ= ĠFile ( tmpdir , Ġ"$ original K lib Name . k lib ") ĊĠĠĠĠĠĠĠ ĠK lib TestUtil . compile Common Sources To K lib ( listOf ( File ( SOURCE _ FILE )), Ġoriginal K lib Name , Ġoriginal K lib File ) ĊĊĠĠĠĠĠĠĠ Ġval Ġoriginal Module Ġ= ĠK lib TestUtil . deserialize K lib To Common Module ( original K lib File ) ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Call ables Ġ= Ġcollect Call ables For Patch ( original Module ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġoriginal Call ables . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġoriginal Call ables . all Ġ{ Ġit . has Stable Parameter Names () Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġoriginal Call ables . forEach Ġ{ Ġit . set Has Stable Parameter Names ( false ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpatched K lib Name Ġ= Ġ"${ original K lib File . name Without Extension }- patched " ĊĠĠĠĠĠĠĠ Ġval Ġpatched K lib File Ġ= Ġoriginal K lib File . resolve Sibling ("$ patched K lib Name . k lib ") ĊĠĠĠĠĠĠĠ ĠK lib TestUtil . serialize Common Module To K lib ( original Module , Ġpatched K lib Name , Ġpatched K lib File ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpatched Module Ġ= ĠK lib TestUtil . deserialize K lib To Common Module ( patched K lib File ) ĊĠĠĠĠĠĠĠ Ġval Ġpatched Call ables Ġ= Ġcollect Call ables For Patch ( patched Module ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Ġ= Ġoriginal Call ables . size , Ġactual Ġ= Ġpatched Call ables . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Ġ= Ġoriginal Call ables . map Ġ{ Ġit . signature Ġ}. toSet (), Ġactual Ġ= Ġpatched Call ables . map Ġ{ Ġit . signature Ġ}. toSet ()) ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġpatched Call ables . all Ġ{ Ġ! it . has Stable Parameter Names () Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSOURCE _ FILE Ġ= Ġ" compiler / testData / serialization / non Stable Parameter Names / test . kt " ĊĊĠĠĠĠĠĠĠ Ġfun Ġcollect Call ables For Patch ( module : ĠModule Descriptor Impl ): ĠList < Function Descriptor Impl > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠDeclaration Descriptor . cast To Function Impl (): ĠFunction Descriptor Impl Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ed Cast Ġ{ Ġ" Not Ġan Ġinstance Ġof Ġ${ Function Descriptor Impl :: class . java }: Ġ${ this :: class . java }, Ġ$ this " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Function Descriptor Impl >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġrecurse ( member Scope : ĠMember Scope ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember Scope ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Cont ributed Descriptors ( Descriptor Kind Filter ( FUNCTION S _ MASK Ġor ĠCL AS SI FI ERS _ MASK )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġdescriptor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSimple Function Descriptor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( descriptor . kind Ġ!= ĠCallable Member Descriptor . Kind . FA KE _ OVERRIDE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġdescriptor . cast To Function Impl () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠClass Descriptor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor . construct ors . map To ( result ) Ġ{ Ġit . cast To Function Impl () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecurse ( descriptor . un subst it uted Member Scope ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackage Fragment Provider Ġ= Ġmodule . package Fragment Provider For Module Content Without Dependencies ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġrecurse ( package Fq Name : ĠF q Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Fragment Provider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Package Fragments ( package Fq Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġpackage Fragment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecurse ( package Fragment . get Member Scope ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Fragment Provider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getSub Packages Of ( package Fq Name , Ġalways True ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġrecurse ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecurse ( Fq Name . ROOT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠFunction Descriptor Impl . signature : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( fq Name Safe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (' (' ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Parameters . join To ( this , Ġ", ") Ġ{ Ġit . type . constructor . declaration Descriptor ?. fq Name Safe ?. asString (). or Empty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (' )') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ