package Ġcom . github . code ql . utils Ċ Ċ import Ġorg . jetbrains . kotlin . backend . common . ir . all Over ridden Ċ import Ġorg . jetbrains . kotlin . builtins . Standard Names Ċ import Ġorg . jetbrains . kotlin . ir . declarations . Ir Annotation Container Ċ import Ġorg . jetbrains . kotlin . ir . declarations . Ir Class Ċ import Ġorg . jetbrains . kotlin . ir . declarations . Ir Function Ċ import Ġorg . jetbrains . kotlin . ir . declarations . Ir Simple Function Ċ import Ġorg . jetbrains . kotlin . ir . expressions . Ir Const Ċ import Ġorg . jetbrains . kotlin . ir . expressions . Ir Constructor Call Ċ import Ġorg . jetbrains . kotlin . ir . types . Ir Simple Type Ċ import Ġorg . jetbrains . kotlin . ir . util . fq Name When Available Ċ import Ġorg . jetbrains . kotlin . ir . util . package Fq Name Ċ import Ġorg . jetbrains . kotlin . ir . util . parent Class OrNull Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . name . Name Ċ Ċ private Ġdata Ġclass ĠMethod Key ( val ĠclassName : ĠF q Name , Ġval Ġfunction Name : ĠName ) Ċ Ċ private Ġfun Ġmake Description ( className : ĠF q Name , Ġfunction Name : ĠString ) Ġ= ĠMethod Key ( className , ĠName . guess By First Character ( function Name )) Ċ Ċ // ĠThis Ġessentially Ġmir rors ĠSpecial Bridge Methods . kt , Ġa Ġbackend Ġpass Ġwhich Ġisn 't Ġeasily Ġavailable Ġto Ġour Ġextractor . Ċ private Ġval Ġspecial Functions Ġ= Ġmap Of ( ĊĠĠĠ Ġmake Description ( Standard Names . Fq Names . collection , Ġ"< get - size >") Ġto Ġ" size ", ĊĠĠĠ Ġmake Description ( Fq Name (" java . util . Collection "), Ġ"< get - size >") Ġto Ġ" size ", ĊĠĠĠ Ġmake Description ( Standard Names . Fq Names . map , Ġ"< get - size >") Ġto Ġ" size ", ĊĠĠĠ Ġmake Description ( Fq Name (" java . util . Map "), Ġ"< get - size >") Ġto Ġ" size ", ĊĠĠĠ Ġmake Description ( Standard Names . Fq Names . char Sequence . to Safe (), Ġ"< get - length >") Ġto Ġ" length ", ĊĠĠĠ Ġmake Description ( Fq Name (" java . lang . CharSequence "), Ġ"< get - length >") Ġto Ġ" length ", ĊĠĠĠ Ġmake Description ( Standard Names . Fq Names . map , Ġ"< get - keys >") Ġto Ġ" keySet ", ĊĠĠĠ Ġmake Description ( Fq Name (" java . util . Map "), Ġ"< get - keys >") Ġto Ġ" keySet ", ĊĠĠĠ Ġmake Description ( Standard Names . Fq Names . map , Ġ"< get - values >") Ġto Ġ" values ", ĊĠĠĠ Ġmake Description ( Fq Name (" java . util . Map "), Ġ"< get - values >") Ġto Ġ" values ", ĊĠĠĠ Ġmake Description ( Standard Names . Fq Names . map , Ġ"< get - entries >") Ġto Ġ" entrySet ", ĊĠĠĠ Ġmake Description ( Fq Name (" java . util . Map "), Ġ"< get - entries >") Ġto Ġ" entrySet ", ĊĠĠĠ Ġmake Description ( Standard Names . Fq Names . mutable List , Ġ" remove At ") Ġto Ġ" remove ", ĊĠĠĠ Ġmake Description ( Fq Name (" java . util . List "), Ġ" remove At ") Ġto Ġ" remove ", ĊĠĠĠ Ġmake Description ( Standard Names . Fq Names ._ enum . to Safe (), Ġ"< get - ordinal >") Ġto Ġ" ordinal ", ĊĠĠĠ Ġmake Description ( Fq Name (" java . lang . Enum "), Ġ"< get - ordinal >") Ġto Ġ" ordinal ", ĊĠĠĠ Ġmake Description ( Standard Names . Fq Names ._ enum . to Safe (), Ġ"< get - name >") Ġto Ġ" name ", ĊĠĠĠ Ġmake Description ( Fq Name (" java . lang . Enum "), Ġ"< get - name >") Ġto Ġ" name ", ĊĠĠĠ Ġmake Description ( Standard Names . Fq Names . number . to Safe (), Ġ" to Byte ") Ġto Ġ" byte Value ", ĊĠĠĠ Ġmake Description ( Fq Name (" java . lang . Number "), Ġ" to Byte ") Ġto Ġ" byte Value ", ĊĠĠĠ Ġmake Description ( Standard Names . Fq Names . number . to Safe (), Ġ" to Short ") Ġto Ġ" short Value ", ĊĠĠĠ Ġmake Description ( Fq Name (" java . lang . Number "), Ġ" to Short ") Ġto Ġ" short Value ", ĊĠĠĠ Ġmake Description ( Standard Names . Fq Names . number . to Safe (), Ġ" toInt ") Ġto Ġ" intValue ", ĊĠĠĠ Ġmake Description ( Fq Name (" java . lang . Number "), Ġ" toInt ") Ġto Ġ" intValue ", ĊĠĠĠ Ġmake Description ( Standard Names . Fq Names . number . to Safe (), Ġ" to Long ") Ġto Ġ" longValue ", ĊĠĠĠ Ġmake Description ( Fq Name (" java . lang . Number "), Ġ" to Long ") Ġto Ġ" longValue ", ĊĠĠĠ Ġmake Description ( Standard Names . Fq Names . number . to Safe (), Ġ" toFloat ") Ġto Ġ" float Value ", ĊĠĠĠ Ġmake Description ( Fq Name (" java . lang . Number "), Ġ" toFloat ") Ġto Ġ" float Value ", ĊĠĠĠ Ġmake Description ( Standard Names . Fq Names . number . to Safe (), Ġ" toDouble ") Ġto Ġ" doubleValue ", ĊĠĠĠ Ġmake Description ( Fq Name (" java . lang . Number "), Ġ" toDouble ") Ġto Ġ" doubleValue ", Ċ ) Ċ Ċ private Ġval Ġspecial Function Short Names Ġ= Ġspecial Functions . keys . map Ġ{ Ġit . function Name Ġ}. toSet () Ċ Ċ fun Ġget Special Jvm Name ( f : ĠIr Function ): ĠString ? Ġ{ ĊĠĠĠ Ġif Ġ( special Function Short Names . contains ( f . name ) Ġ&& Ġf Ġis ĠIr Simple Function ) Ġ{ ĊĠĠĠĠĠĠĠ Ġf . all Over ridden ( true ). forEach Ġ{ Ġoverridden Func Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverridden Func . parent Class OrNull ?. fq Name When Available ?. let Ġ{ Ġparent Fq Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspecial Functions [ Method Key ( parent Fq Name , Ġf . name )] ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ fun Ġget Jvm Name ( container : ĠIr Annotation Container ): ĠString ? Ġ{ ĊĠĠĠ Ġfor ( a : ĠIr Constructor Call Ġin Ġcontainer . annotations ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġa . type ĊĠĠĠĠĠĠĠ Ġif Ġ( t Ġis ĠIr Simple Type Ġ&& Ġa . value Arguments Count Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġowner Ġ= Ġt . classifier . owner ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġa . getValue Argument ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( owner Ġis ĠIr Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Pkg Ġ= Ġowner . package Fq Name ?. asString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġowner . name . asString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( a Pkg Ġ== Ġ" kotlin . jvm " Ġ&& Ġname Ġ== Ġ" Jvm Name " Ġ&& Ġv Ġis ĠIr Const <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġv . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġis ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ( container Ġas ? ĠIr Function )?. let Ġ{ Ġget Special Jvm Name ( container ) Ġ} Ċ }