/* Ċ Ġ* Ġ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 . descriptors Ċ Ċ import Ġorg . jetbrains . kotlin . resolve . Descriptor Utils Ċ import Ġorg . jetbrains . kotlin . types . Kotlin Type Ċ import Ġorg . jetbrains . kotlin . descriptors . Effective Visibility .* Ċ import Ġorg . jetbrains . kotlin . descriptors . Relation To Type .* Ċ import Ġorg . jetbrains . kotlin . resolve . descriptor Util . is Published Api Ċ Ċ sealed Ġclass ĠEffect ive Visibility ( val Ġname : ĠString , Ġval Ġpublic Api : ĠBoolean Ġ= Ġfalse , Ġval Ġprivate Api : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġname ĊĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPublic ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/ -- / ĠĠ Ġ| Ġ Ġ\ ------------- \ ĊĠĠĠ Ġ// ĠProtected ( Base ) ĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ\ ĊĠĠĠ Ġ// ĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠ ĠProtected ( Other ) ĠĠĠĠĠĠĠ ĠInternal Ġ= ĠPackage Private ĊĠĠĠ Ġ// ĠProtected ( Derived ) Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/ ĠĠĠĠ Ġ\ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/ ĠĠĠ ĠInternal Protected ( Base ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠ ĠProtected Bound ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/ ĠĠĠĠĠĠĠ Ġ\ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ\ ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/ ĠĠĠĠĠĠ Ġ/ Internal Protected ( Derived ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ\ Internal Protected Bound / ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrivate Ġ= ĠLocal ĊĊĊĠĠĠ Ġobject ĠPrivate Ġ: ĠEffect ive Visibility (" private ", Ġprivate Api Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrelation ( other : ĠEffect ive Visibility ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ== Ġother Ġ|| ĠLocal Ġ== Ġother ) ĠPer miss iveness . SAME Ġelse ĠPer miss iveness . LESS ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Visibility () Ġ= ĠVis ibilities . PRIVATE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠEffect ively Ġsame Ġas ĠPrivate ĊĠĠĠ Ġobject ĠLocal Ġ: ĠEffect ive Visibility (" local ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrelation ( other : ĠEffect ive Visibility ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ== Ġother Ġ|| ĠPrivate Ġ== Ġother ) ĠPer miss iveness . SAME Ġelse ĠPer miss iveness . LESS ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Visibility () Ġ= ĠVis ibilities . LOCAL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠPublic Ġ: ĠEffect ive Visibility (" public ", Ġpublic Api Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrelation ( other : ĠEffect ive Visibility ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ== Ġother ) ĠPer miss iveness . SAME Ġelse ĠPer miss iveness . MORE ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Visibility () Ġ= ĠVis ibilities . PUBLIC ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġclass ĠInternal Or Package Ġprotected Ġconstructor ( internal : ĠBoolean ) Ġ: ĠEffect ive Visibility ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( internal ) Ġ" internal " Ġelse Ġ" public /* package */ " ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrelation ( other : ĠEffect ive Visibility ) Ġ= Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPublic Ġ-> ĠPer miss iveness . LESS ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrivate , ĠLocal , ĠInternal Protected Bound , Ġis ĠInternal Protected Ġ-> ĠPer miss iveness . MORE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInternal Or Package Ġ-> ĠPer miss iveness . SAME ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProtected Bound , Ġis ĠProtected Ġ-> ĠPer miss iveness . UNKNOWN ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġlower Bound ( other : ĠEffect ive Visibility ) Ġ= Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPublic Ġ-> Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrivate , ĠLocal , ĠInternal Protected Bound , Ġis ĠInternal Or Package , Ġis ĠInternal Protected Ġ-> Ġother ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠProtected Ġ-> ĠInternal Protected ( other . container ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProtected Bound Ġ-> ĠInternal Protected Bound ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠInternal Ġ: ĠInternal Or Package ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Visibility () Ġ= ĠVis ibilities . INTERNAL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠPackage Private Ġ: ĠInternal Or Package ( false ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Visibility () Ġ= ĠVis ibilities . PRIVATE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠProtected ( val Ġcontainer : ĠClass Descriptor ?) Ġ: ĠEffect ive Visibility (" protected ", Ġpublic Api Ġ= Ġtrue ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= Ġ( other Ġis ĠProtected Ġ&& Ġcontainer Ġ== Ġother . container ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= Ġcontainer ?. hashCode () Ġ?: Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ"${ super . toString ()} Ġ( in Ġ${ container ?. name Ġ?: Ġ'? '}) " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrelation ( other : ĠEffect ive Visibility ) Ġ= Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPublic Ġ-> ĠPer miss iveness . LESS ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrivate , ĠLocal , ĠProtected Bound , ĠInternal Protected Bound Ġ-> ĠPer miss iveness . MORE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠProtected Ġ-> Ġcontainer Relation ( container , Ġother . container ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInternal Protected Ġ-> Ġwhen Ġ( container Relation ( container , Ġother . container )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠProtected Ġnever Ġcan Ġbe Ġless Ġper miss ive Ġthan Ġinternal Ġ& Ġprotected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . SAME , ĠPer miss iveness . MORE Ġ-> ĠPer miss iveness . MORE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . UNKNOWN , ĠPer miss iveness . LESS Ġ-> ĠPer miss iveness . UNKNOWN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInternal Or Package Ġ-> ĠPer miss iveness . UNKNOWN ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġlower Bound ( other : ĠEffect ive Visibility ) Ġ= Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPublic Ġ-> Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrivate , ĠLocal , ĠProtected Bound , ĠInternal Protected Bound Ġ-> Ġother ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠProtected Ġ-> Ġwhen Ġ( relation ( other )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . SAME , ĠPer miss iveness . MORE Ġ-> Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . LESS Ġ-> Ġother ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . UNKNOWN Ġ-> ĠProtected Bound ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInternal Protected Ġ-> Ġwhen Ġ( relation ( other )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . LESS Ġ-> Ġother ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠInternal Protected Bound ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInternal Or Package Ġ-> ĠInternal Protected ( container ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Visibility () Ġ= ĠVis ibilities . PROTECT ED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠLower Ġbound Ġfor Ġall Ġprotected Ġvis ibilities ĊĠĠĠ Ġobject ĠProtected Bound Ġ: ĠEffect ive Visibility (" protected Ġ( in Ġdifferent Ġclasses )", Ġpublic Api Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrelation ( other : ĠEffect ive Visibility ) Ġ= Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPublic , Ġis ĠProtected Ġ-> ĠPer miss iveness . LESS ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrivate , ĠLocal , ĠInternal Protected Bound Ġ-> ĠPer miss iveness . MORE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProtected Bound Ġ-> ĠPer miss iveness . SAME ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInternal Or Package , Ġis ĠInternal Protected Ġ-> ĠPer miss iveness . UNKNOWN ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġlower Bound ( other : ĠEffect ive Visibility ) Ġ= Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPublic , Ġis ĠProtected Ġ-> Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrivate , ĠLocal , ĠProtected Bound , ĠInternal Protected Bound Ġ-> Ġother ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInternal Or Package , Ġis ĠInternal Protected Ġ-> ĠInternal Protected Bound ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Visibility () Ġ= ĠVis ibilities . PROTECT ED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠLower Ġbound Ġfor Ġinternal Ġand Ġprotected ( C ) ĊĠĠĠ Ġclass ĠInternal Protected ( val Ġcontainer : ĠClass Descriptor ?): ĠEffect ive Visibility (" internal Ġ& Ġprotected ") Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= Ġ( other Ġis ĠInternal Protected Ġ&& Ġcontainer Ġ== Ġother . container ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= Ġcontainer ?. hashCode () Ġ?: Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ"${ super . toString ()} Ġ( in Ġ${ container ?. name Ġ?: Ġ'? '}) " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrelation ( other : ĠEffect ive Visibility ) Ġ= Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPublic , Ġis ĠInternal Or Package Ġ-> ĠPer miss iveness . LESS ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrivate , ĠLocal , ĠInternal Protected Bound Ġ-> ĠPer miss iveness . MORE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInternal Protected Ġ-> Ġcontainer Relation ( container , Ġother . container ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠProtected Ġ-> Ġwhen Ġ( container Relation ( container , Ġother . container )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInternal Ġ& Ġprotected Ġnever Ġcan Ġbe Ġmore Ġper miss ive Ġthan Ġjust Ġprotected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . SAME , ĠPer miss iveness . LESS Ġ-> ĠPer miss iveness . LESS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . UNKNOWN , ĠPer miss iveness . MORE Ġ-> ĠPer miss iveness . UNKNOWN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProtected Bound Ġ-> ĠPer miss iveness . UNKNOWN ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġlower Bound ( other : ĠEffect ive Visibility ) Ġ= Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPublic , Ġis ĠInternal Or Package Ġ-> Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrivate , ĠLocal , ĠInternal Protected Bound Ġ-> Ġother ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠProtected , Ġis ĠInternal Protected Ġ-> Ġwhen Ġ( relation ( other )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . SAME , ĠPer miss iveness . MORE Ġ-> Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . LESS Ġ-> Ġother ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . UNKNOWN Ġ-> ĠInternal Protected Bound ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProtected Bound Ġ-> ĠInternal Protected Bound ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Visibility () Ġ= ĠVis ibilities . PRIVATE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠLower Ġbound Ġfor Ġinternal Ġand Ġprotected Ġlower Ġbound ĊĠĠĠ Ġobject ĠInternal Protected Bound Ġ: ĠEffect ive Visibility (" internal Ġ& Ġprotected Ġ( in Ġdifferent Ġclasses )") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrelation ( other : ĠEffect ive Visibility ) Ġ= Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPublic , Ġis ĠProtected , Ġis ĠInternal Protected , ĠProtected Bound , Ġis ĠInternal Or Package Ġ-> ĠPer miss iveness . LESS ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrivate , ĠLocal Ġ-> ĠPer miss iveness . MORE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInternal Protected Bound Ġ-> ĠPer miss iveness . SAME ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto Visibility () Ġ= ĠVis ibilities . PRIVATE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠPer miss iveness Ġ{ ĊĠĠĠĠĠĠĠ ĠL ESS , ĊĠĠĠĠĠĠĠ ĠS AME , ĊĠĠĠĠĠĠĠ ĠMO RE , ĊĠĠĠĠĠĠĠ ĠUNKNOWN ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġrelation ( other : ĠEffect ive Visibility ): ĠPer miss iveness ĊĊĠĠĠ Ġabstract Ġfun Ġto Visibility (): ĠVisibility ĊĊĠĠĠ Ġopen Ġinternal Ġfun Ġlower Bound ( other : ĠEffect ive Visibility ) Ġ= Ġwhen Ġ( relation ( other )) Ġ{ ĊĠĠĠĠĠĠĠ ĠPer miss iveness . SAME , ĠPer miss iveness . LESS Ġ-> Ġthis ĊĠĠĠĠĠĠĠ ĠPer miss iveness . MORE Ġ-> Ġother ĊĠĠĠĠĠĠĠ ĠPer miss iveness . UNKNOWN Ġ-> ĠPrivate ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġcontainer Relation ( first : ĠClass Descriptor ?, Ġsecond : ĠClass Descriptor ?): ĠPer miss iveness Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( first Ġ== Ġnull Ġ|| Ġsecond Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . UNKNOWN ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( first Ġ== Ġsecond ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . SAME ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( Descriptor Utils . is Subclass ( first , Ġsecond )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . LESS ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( Descriptor Utils . is Subclass ( second , Ġfirst )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . MORE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . UNKNOWN ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ private Ġfun Ġlower Bound ( first : ĠEffect ive Visibility , Ġsecond : ĠEffect ive Visibility ) Ġ= ĊĠĠĠĠĠĠĠ Ġfirst . lower Bound ( second ) Ċ Ċ private Ġfun Ġlower Bound ( first : ĠEffect ive Visibility , Ġargs : ĠList < Effective Visibility >) Ġ= ĊĠĠĠĠĠĠĠ Ġargs . fold ( first , Ġ{ Ġx , Ġy Ġ-> Ġx . lower Bound ( y ) Ġ}) Ċ Ċ private Ġfun Ġlower Bound ( args : ĠList < Effective Visibility >) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( args . isEmpty ()) ĠPublic Ġelse Ġlower Bound ( args . first (), Ġargs . sub List ( 1 , Ġargs . size )) Ċ Ċ private Ġfun ĠVisibility . for Visibility ( descriptor : ĠDeclaration Descriptor , Ġcheck Published Api : ĠBoolean Ġ= Ġfalse ): ĠEffect ive Visibility Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVis ibilities . PRIVATE , ĠVis ibilities . PRIVATE _ TO _ THIS , ĠVis ibilities . IN VISIBLE _ FA KE Ġ-> ĠPrivate ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVis ibilities . PROTECT ED Ġ-> ĠProtected ( descriptor . containing Declaration Ġas ? ĠClass Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVis ibilities . INTERNAL Ġ-> Ġif Ġ(! check Published Api Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! descriptor . is Published Api ()) ĠInternal Ġelse ĠPublic ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVis ibilities . PUBLIC Ġ-> ĠPublic ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVis ibilities . LOCAL Ġ-> ĠLocal ĊĠĠĠĠĠĠĠ Ġ// ĠNB : Ġvisibility Ġmust Ġbe Ġalready Ġnormalized Ġhere , Ġso Ġe . g . Ġno ĠJava Vis ibilities Ġare Ġpossible Ġat Ġthis Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠAssertionError (" Visibility Ġ$ name Ġis Ġnot Ġallowed Ġin Ġfor Visibility ") ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ fun Ġeffective Visibility ( visibility : ĠVisibility , Ġdescriptor : ĠDeclaration Descriptor , Ġcheck Published Api : ĠBoolean Ġ= Ġfalse ) Ġ= ĊĠĠĠĠĠĠĠ Ġvisibility . for Visibility ( descriptor , Ġcheck Published Api ) Ċ Ċ enum Ġclass ĠRelation To Type ( val Ġdescription : ĠString ) Ġ{ ĊĠĠĠ ĠCON STRUCTOR (""), ĊĠĠĠ ĠCON TAIN ER (" Ġcontaining Ġdeclaration "), ĊĠĠĠ ĠARG UMENT (" Ġargument "), ĊĠĠĠ ĠARG UMENT _ CONTAINER (" Ġargument Ġcontaining Ġdeclaration "); ĊĊĠĠĠ Ġfun Ġcontainer Relation () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCON STRUCTOR , ĠCON TAIN ER Ġ-> ĠCON TAIN ER ĊĠĠĠĠĠĠĠ ĠARG UMENT , ĠARG UMENT _ CONTAINER Ġ-> ĠARG UMENT _ CONTAINER ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġdescription Ċ } Ċ Ċ data Ġclass ĠDescriptor With Relation ( val Ġdescriptor : ĠClass ifier Descriptor , Ġprivate Ġval Ġrelation : ĠRelation To Type ) Ġ{ ĊĠĠĠ Ġfun Ġeffective Visibility () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( descriptor Ġas ? ĠClass Descriptor )?. visibility ?. effective Visibility ( descriptor , Ġfalse ) Ġ?: ĠPublic ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ"$ relation Ġ${ descriptor . name }" Ċ } Ċ Ċ private Ġfun ĠClass ifier Descriptor . dependent Descriptors ( own Relation : ĠRelation To Type ): ĠSet < Descriptor With Relation > Ġ= ĊĠĠĠĠĠĠĠ Ġset Of ( Descriptor With Relation ( this , Ġown Relation )) Ġ+ ĊĠĠĠĠĠĠĠ Ġ(( this . containing Declaration Ġas ? ĠClass ifier Descriptor )?. dependent Descriptors ( own Relation . container Relation ()) Ġ?: Ġempty Set ()) Ċ Ċ fun ĠClass Descriptor . effective Visibility ( check Published Api : ĠBoolean Ġ= Ġfalse ) Ġ= Ġeffective Visibility ( empty Set (), Ġcheck Published Api ) Ċ Ċ private Ġfun ĠClass Descriptor . effective Visibility ( classes : ĠSet < Class Descriptor >, Ġcheck Published Api : ĠBoolean ): ĠEffect ive Visibility Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġin Ġclasses ) ĠPublic ĊĠĠĠĠĠĠĠ Ġelse Ġwith ( this . containing Declaration Ġas ? ĠClass Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlower Bound ( visibility . effective Visibility ( this @ effective Visibility , Ġcheck Published Api ), Ġthis ?. effective Visibility ( classes Ġ+ Ġthis @ effective Visibility , Ġcheck Published Api ) Ġ?: ĠPublic ) ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠShould Ġcollect Ġall Ġdependent Ġclassifier Ġdescriptors , Ġto Ġget Ġverbose Ġdiagnostic Ċ private Ġfun ĠKotlin Type . dependent Descriptors () Ġ= Ġdependent Descriptors ( empty Set (), ĠCON STRUCTOR ) Ċ Ċ private Ġfun ĠKotlin Type . dependent Descriptors ( types : ĠSet < Kotlin Type >, Ġown Relation : ĠRelation To Type ): ĠSet < Descriptor With Relation > Ġ{ ĊĠĠĠ Ġif Ġ( this Ġin Ġtypes ) Ġreturn Ġempty Set () ĊĠĠĠ Ġval Ġown Dependent Ġ= Ġconstructor . declaration Descriptor ?. dependent Descriptors ( own Relation ) Ġ?: Ġempty Set () ĊĠĠĠ Ġval Ġargument Dependent Ġ= Ġarguments . map Ġ{ Ġit . type . dependent Descriptors ( types Ġ+ Ġthis , ĠARG UMENT ) Ġ}. flatten () ĊĠĠĠ Ġreturn Ġown Dependent Ġ+ Ġargument Dependent Ċ } Ċ Ċ private Ġfun ĠSet < Descriptor With Relation >. least Per miss ive ( base : ĠEffect ive Visibility ): ĠDescriptor With Relation ? Ġ{ ĊĠĠĠ Ġfor Ġ( descriptor With Relation Ġin Ġthis ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Visibility Ġ= Ġdescriptor With Relation . effective Visibility () ĊĠĠĠĠĠĠĠ Ġwhen Ġ( current Visibility . relation ( base )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPer miss iveness . LESS , ĠPer miss iveness . UNKNOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdescriptor With Relation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ fun ĠKotlin Type . least Per miss ive Descriptor ( base : ĠEffect ive Visibility ) Ġ= Ġdependent Descriptors (). least Per miss ive ( base ) Ċ Ċ fun ĠDeclaration Descriptor With Visibility . effective Visibility ( ĊĠĠĠĠĠĠĠ Ġvisibility : ĠVisibility Ġ= Ġthis . visibility , Ġcheck Published Api : ĠBoolean Ġ= Ġfalse Ċ ): ĠEffect ive Visibility Ġ= ĊĠĠĠĠĠĠĠ Ġlower Bound ( visibility . effective Visibility ( this , Ġcheck Published Api ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this . containing Declaration Ġas ? ĠClass Descriptor )?. effective Visibility ( check Published Api ) Ġ?: ĠPublic ) ĊĊ