/* Ċ Ġ* Ġ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 . fir . types Ċ Ċ import Ġorg . jetbrains . kotlin . fir . render Ċ import Ġorg . jetbrains . kotlin . fir . types . impl . F ir Implicit Builtin Type Ref Ċ Ċ object ĠF ir Type Ref Comparator Ġ: ĠComparator < F ir Type Ref > Ġ{ ĊĠĠĠ Ġprivate Ġval ĠF ir Type Ref . priority Ġ: ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF ir User Type Ref Ġ-> Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF ir Implicit Builtin Type Ref Ġ-> Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF ir Resolved Type Ref Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompare ( a : ĠF ir Type Ref , Ġb : ĠF ir Type Ref ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpriority Diff Ġ= Ġa . priority Ġ- Ġb . priority ĊĠĠĠĠĠĠĠ Ġif Ġ( priority Diff Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpriority Diff ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( a ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF ir User Type Ref Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( b Ġis ĠF ir User Type Ref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" priority Ġis Ġinconsistent : Ġ${ a . render ()} Ġv . s . Ġ${ b . render () }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqualifier Size Diff Ġ= Ġa . qual ifier . size Ġ- Ġb . qual ifier . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( qual ifier Size Diff Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġqualifier Size Diff ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( a Qualifier , Ġb Qualifier ) Ġin Ġa . qual ifier . zip ( b . qual ifier )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqualifier Name Diff Ġ= Ġa Qualifier . name . compareTo ( b Qualifier . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( qual ifier Name Diff Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġqualifier Name Diff ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Argument Size Diff Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Qualifier . type ArgumentList . type Arguments . size Ġ- Ġb Qualifier . type ArgumentList . type Arguments . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Argument Size Diff Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtype Argument Size Diff ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Arguments Ġ= Ġa Qualifier . type ArgumentList . type Arguments . zip ( b Qualifier . type ArgumentList . type Arguments ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( a Type Argument , Ġb Type Argument ) Ġin Ġtype Arguments ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Argument Diff Ġ= ĠF ir Type Projection Comparator . compare ( a Type Argument , Ġb Type Argument ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Argument Diff Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtype Argument Diff ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF ir Implicit Builtin Type Ref Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( b Ġis ĠF ir Implicit Builtin Type Ref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" priority Ġis Ġinconsistent : Ġ${ a . render ()} Ġv . s . Ġ${ b . render () }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġa . id . short ClassName . compareTo ( b . id . short ClassName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF ir Resolved Type Ref Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( b Ġis ĠF ir Resolved Type Ref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" priority Ġis Ġinconsistent : Ġ${ a . render ()} Ġv . s . Ġ${ b . render () }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠC one Kotlin Type Comparator . compare ( a . type , Ġb . type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Unsupported Ġtype Ġreference Ġcomparison : Ġ${ a . render ()} Ġv . s . Ġ${ b . render () }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ