/* Ċ Ġ* Ġ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 . analysis . low . level . api . fir . api Ċ Ċ import Ġorg . jetbrains . kotlin . fir . F ir Element Ċ import Ġorg . jetbrains . kotlin . psi . Kt Element Ċ import Ġjava . util .* Ċ import Ġkotlin . reflect . K Class Ċ Ċ class ĠInvalid F ir ElementType Exception ( ĊĠĠĠ Ġactual F ir Class : ĠK Class < out ĠF ir Element > ?, ĊĠĠĠ Ġkt Element : ĠK t Element ?, ĊĠĠĠ Ġexpected F ir Classes : ĠList < K Class < out ĠF ir Element >>, Ċ ) Ġ: ĠIllegalStateException () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġmessage : ĠString Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( kt Element Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" For Ġ$ kt Element Ġwith Ġtext Ġ`${ kt Element . text }`, Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġwhen Ġ( expected F ir Classes . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ" Unexpected ĠF ir Element Ġof Ġtype :" ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ" The ĠF ir Element Ġof Ġtype Ġ${ expected F ir Classes . single ()} Ġexpected , Ġbut " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" One Ġof Ġ[ ${ expected F ir Classes . join ToString ()} ] ĠF ir Element Ġtypes Ġexpected , Ġbut " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġappend ( if Ġ( kt Element Ġ== Ġnull ) Ġmessage Ġelse Ġmessage . replace First Char Ġ{ Ġit . lowercase ( Locale . getDefault ()) Ġ}) ĊĠĠĠĠĠĠĠ Ġif Ġ( actual F ir Class Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġ${ actual F ir Class . simple Name } Ġfound ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġno ĠF ir Element Ġfound ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun Ġthrow Unexpected F ir Element Error ( ĊĠĠĠ Ġfir Element : ĠF ir Element ?, ĊĠĠĠ Ġkt Element : ĠK t Element ? Ġ= Ġnull , ĊĠĠĠ Ġvar arg Ġexpected F ir Classes : ĠK Class < out ĠF ir Element > Ċ ): ĠNothing Ġ{ ĊĠĠĠ Ġthrow ĠInvalid F ir ElementType Exception ( fir Element ?. let Ġ{ Ġit :: class Ġ}, Ġkt Element , Ġexpected F ir Classes . toList ()) Ċ }