/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 9 Ġ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 . as Java . classes Ċ Ċ import Ġcom . google . common . collect . Lists Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . util . Comp utable Ċ import Ġcom . intellij . psi .* Ċ import Ġcom . intellij . psi . impl . cache . Modifier Flags Ċ import Ġcom . intellij . psi . impl . cache . TypeInfo Ċ import Ġcom . intellij . psi . impl . compiled . Cls Type Element Impl Ċ import Ġcom . intellij . psi . impl . compiled . Signature Parsing Ċ import Ġcom . intellij . psi . impl . compiled . Stub Building Visitor Ċ import Ġcom . intellij . psi . impl . light .* Ċ import Ġcom . intellij . psi . util . Type Conversion Util Ċ import Ġcom . intellij . util . Bit Util . isSet Ċ import Ġcom . intellij . util . Incorrect OperationException Ċ import Ġcom . intellij . util . containers . Container Util Ċ import Ġorg . jetbrains . kotlin . as Java . Light Class Generation Support Ċ import Ġorg . jetbrains . kotlin . as Java . Ul tra Light Class Modifier Extension Ċ import Ġorg . jetbrains . kotlin . as Java . builder . Light Member Origin For Declaration Ċ import Ġorg . jetbrains . kotlin . as Java . elements . Kotlin Light Type Parameter List Builder Ċ import Ġorg . jetbrains . kotlin . as Java . elements . Kt Light Method Ċ import Ġorg . jetbrains . kotlin . as Java . elements . psi Type Ċ import Ġorg . jetbrains . kotlin . builtins . Kotlin Built Ins Ċ import Ġorg . jetbrains . kotlin . builtins . jvm . Java To Kotlin Class Map Ċ import Ġorg . jetbrains . kotlin . codegen . Asm Util Ċ import Ġorg . jetbrains . kotlin . codegen . Jvm Code gen Util Ċ import Ġorg . jetbrains . kotlin . codegen . Owner Kind Ċ import Ġorg . jetbrains . kotlin . codegen . signature . Both Signature Writer Ċ import Ġorg . jetbrains . kotlin . codegen . signature . Jvm Signature Writer Ċ import Ġorg . jetbrains . kotlin . codegen . state . Kotlin Type Mapper Ċ import Ġorg . jetbrains . kotlin . descriptors .* Ċ import Ġorg . jetbrains . kotlin . load . kotlin . Type Mapping Mode Ċ import Ġorg . jetbrains . kotlin . lexer . Kt Tokens Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . name . Special Names Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . resolve . Descriptor To Source Utils Ċ import Ġorg . jetbrains . kotlin . resolve . Descriptor Utils Ċ import Ġorg . jetbrains . kotlin . resolve . annotations . JVM _ STATIC _ AN NOT ATION _ FQ _ NAME Ċ import Ġorg . jetbrains . kotlin . resolve . annotations . argument Value Ċ import Ġorg . jetbrains . kotlin . resolve . constants .* Ċ import Ġorg . jetbrains . kotlin . resolve . descriptor Util . class Id Ċ import Ġorg . jetbrains . kotlin . resolve . descriptor Util . module Ċ import Ġorg . jetbrains . kotlin . resolve . jvm . diagnostics . Jvm Declaration Origin Kind Ċ import Ġorg . jetbrains . kotlin . resolve . source . Kotlin Source Element Ċ import Ġorg . jetbrains . kotlin . types . Kotlin Type Ċ import Ġorg . jetbrains . kotlin . types . Type Projection Impl Ċ import Ġorg . jetbrains . kotlin . types . replace Ċ import Ġorg . jetbrains . kotlin . types . type Util . sup ert ypes Ċ import Ġorg . jetbrains . org . object web . asm . Op codes Ċ import Ġjava . text . String Character Iterator Ċ Ċ private Ġinterface ĠType Parameters Support < D , ĠT > Ġ{ ĊĠĠĠ Ġfun Ġparameters ( declaration : ĠD ): ĠList < T > ĊĠĠĠ Ġfun Ġname ( type Parameter : ĠT ): ĠString ? ĊĠĠĠ Ġfun Ġhas Non T rivial Bounds ( declaration : ĠD , Ġtype Parameter : ĠT ): ĠBoolean ĊĠĠĠ Ġfun Ġas Descriptor ( type Parameter : ĠT ): ĠType Parameter Descriptor ? Ċ } Ċ Ċ private Ġval Ġsupport For Descriptor Ġ= Ġobject Ġ: ĠType Parameters Support < Callable Member Descriptor , ĠType Parameter Descriptor > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġparameters ( declaration : ĠCallable Member Descriptor ) Ġ= Ġdeclaration . type Parameters ĊĊĠĠĠ Ġoverride Ġfun Ġname ( type Parameter : ĠType Parameter Descriptor ) Ġ= Ġtype Parameter . name . asString () ĊĊĠĠĠ Ġoverride Ġfun Ġhas Non T rivial Bounds ( ĊĠĠĠĠĠĠĠ Ġdeclaration : ĠCallable Member Descriptor , ĊĠĠĠĠĠĠĠ Ġtype Parameter : ĠType Parameter Descriptor ĊĠĠĠ Ġ) Ġ= Ġtype Parameter . upper Bounds . any Ġ{ Ġ! Kotlin Built Ins . is Default Bound ( it ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġas Descriptor ( type Parameter : ĠType Parameter Descriptor ) Ġ= Ġtype Parameter Ċ } Ċ Ċ private Ġval Ġsupport For Source Declaration Ġ= Ġobject Ġ: ĠType Parameters Support < Kt Type Parameter List Owner , ĠK t Type Parameter > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġparameters ( declaration : ĠK t Type Parameter List Owner ) Ġ= Ġdeclaration . type Parameters ĊĊĠĠĠ Ġoverride Ġfun Ġname ( type Parameter : ĠK t Type Parameter ) Ġ= Ġtype Parameter . name ĊĊĠĠĠ Ġoverride Ġfun Ġhas Non T rivial Bounds ( ĊĠĠĠĠĠĠĠ Ġdeclaration : ĠK t Type Parameter List Owner , ĊĠĠĠĠĠĠĠ Ġtype Parameter : ĠK t Type Parameter ĊĠĠĠ Ġ) Ġ= Ġtype Parameter . extends Bound Ġ!= Ġnull Ġ|| Ġdeclaration . type Constraints . isNotEmpty () ĊĊĠĠĠ Ġoverride Ġfun Ġas Descriptor ( type Parameter : ĠK t Type Parameter ) Ġ= Ġtype Parameter . resolve () Ġas ? ĠType Parameter Descriptor Ċ } Ċ Ċ internal Ġfun Ġbuild Type Parameter List For Descriptor ( ĊĠĠĠ Ġdeclaration : ĠCallable Member Descriptor , ĊĠĠĠ Ġowner : ĠPsi Type Parameter List Owner , ĊĠĠĠ Ġsupport : ĠK t Ul tra Light Support Ċ ): ĠPsi Type Parameter List Ġ= Ġbuild Type Parameter List ( declaration , Ġowner , Ġsupport , Ġsupport For Descriptor ) ĊĊ Ċ internal Ġfun Ġbuild Type Parameter List For Source Declaration ( ĊĠĠĠ Ġdeclaration : ĠK t Type Parameter List Owner , ĊĠĠĠ Ġowner : ĠPsi Type Parameter List Owner , ĊĠĠĠ Ġsupport : ĠK t Ul tra Light Support Ċ ): ĠPsi Type Parameter List Ġ= Ġbuild Type Parameter List ( declaration , Ġowner , Ġsupport , Ġsupport For Source Declaration ) Ċ Ċ private Ġfun Ġ< D , ĠT > Ġbuild Type Parameter List ( ĊĠĠĠ Ġdeclaration : ĠD , ĊĠĠĠ Ġowner : ĠPsi Type Parameter List Owner , ĊĠĠĠ Ġsupport : ĠK t Ul tra Light Support , ĊĠĠĠ Ġtype Parameters Support : ĠType Parameters Support < D , ĠT > Ċ ): ĠPsi Type Parameter List Ġ{ ĊĊĠĠĠ Ġval Ġtp List Ġ= ĠKotlin Light Type Parameter List Builder ( owner ) ĊĊĠĠĠ Ġfor Ġ(( i , Ġparam ) Ġin Ġtype Parameters Support . parameters ( declaration ). with Index ()) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġreference List Builder Ġ= Ġ{ Ġelement : ĠPsi Element Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbound List Ġ= ĠKotlin Light Reference List Builder ( element . manager , ĠPsi Reference List . Role . EXT END S _ BOUN DS _ LIST ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Parameters Support . has Non T rivial Bounds ( declaration , Ġparam )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbound Types Ġ= Ġtype Parameters Support . as Descriptor ( param ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . upper Bounds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . as Psi Type ( support , ĠType Mapping Mode . DEFAULT , Ġelement ) Ġas ? ĠPsi ClassType Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Default Bound Ġ= Ġbound Types . size Ġ== Ġ 1 Ġ&& Ġbound Types [ 0 ]. equals ToText ( Common ClassNames . JAVA _ LANG _ OBJECT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Default Bound ) Ġbound Types . forEach ( bound List :: add Reference ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbound List ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġparameter Name Ġ= Ġtype Parameters Support . name ( param ). or Empty () ĊĊĠĠĠĠĠĠĠ Ġtp List . add Parameter ( Kt Ul tra Light Type Parameter ( parameter Name , Ġowner , Ġtp List , Ġi , Ġreference List Builder )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġtp List Ċ } ĊĊ Ċ internal Ġfun ĠK t Declaration . get Kotlin Type (): ĠKotlin Type ? Ġ{ ĊĠĠĠ Ġval Ġdescriptor Ġ= Ġresolve () ĊĠĠĠ Ġreturn Ġwhen Ġ( descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠValue Descriptor Ġ-> Ġdescriptor . type ĊĠĠĠĠĠĠĠ Ġis ĠCallable Descriptor Ġ-> Ġif Ġ( descriptor Ġis ĠFunction Descriptor Ġ&& Ġdescriptor . is Suspend ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor . module . built Ins . nullable Any Type Ġelse Ġdescriptor . returnType ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠK t Declaration . resolve () Ġ= ĠLight Class Generation Support . getInstance ( project ). resolve To Descriptor ( this ) Ċ internal Ġfun ĠK t Element . analyze () Ġ= ĠLight Class Generation Support . getInstance ( project ). analyze ( this ) Ċ Ċ // Ġcopy - past ed Ġfrom Ġkotlin Internal U ast Utils . kt Ġand Ġpost - processed Ċ internal Ġfun ĠKotlin Type . as Psi Type ( ĊĠĠĠ Ġsupport : ĠK t Ul tra Light Support , ĊĠĠĠ Ġmode : ĠType Mapping Mode , ĊĠĠĠ Ġpsi Context : ĠPsi Element Ċ ): ĠPsi Type Ġ= Ġsupport . map Type ( psi Context ) Ġ{ Ġtype Mapper , Ġsignature Writer Ġ-> ĊĠĠĠ Ġtype Mapper . map Type ( this , Ġsignature Writer , Ġmode ) Ċ } Ċ Ċ internal Ġfun ĠK t Ul tra Light Support . map Type ( ĊĠĠĠ Ġpsi Context : ĠPsi Element , ĊĠĠĠ Ġmap Type To Signature Writer : Ġ( Kotlin Type Mapper , ĠJ vm Signature Writer ) Ġ-> ĠUnit Ċ ): ĠPsi Type Ġ{ ĊĠĠĠ Ġval Ġsignature Writer Ġ= ĠBoth Signature Writer ( Both Signature Writer . Mode . SKIP _ CHECKS ) ĊĠĠĠ Ġmap Type To Signature Writer ( type Mapper , Ġsignature Writer ) ĊĠĠĠ Ġval Ġcanonical Signature Ġ= Ġsignature Writer . toString () ĊĠĠĠ Ġreturn Ġcreate Type From Canonical Text ( canonical Signature , Ġpsi Context ) Ċ } Ċ Ċ fun Ġcreate Type From Canonical Text ( ĊĠĠĠ Ġcanonical Signature : ĠString , ĊĠĠĠ Ġpsi Context : ĠPsi Element Ċ ): ĠPsi Type Ġ{ ĊĠĠĠ Ġval Ġsignature Ġ= ĠString Character Iterator ( canonical Signature ) ĊĊĠĠĠ Ġval Ġjava Type Ġ= ĠSignature Parsing . parse TypeString ( signature , ĠStub Building Visitor . GU ESS ING _ MAP PER ) ĊĠĠĠ Ġval Ġtype Info Ġ= ĠType Info . fromString ( java Type , Ġfalse ) ĊĠĠĠ Ġval Ġtype Text Ġ= ĠType Info . create Type Text ( type Info ) Ġ?: Ġreturn ĠPsi Type . NULL ĊĊĠĠĠ Ġval Ġtype Ġ= ĠC ls Type Element Impl ( psi Context , Ġtype Text , Ġ'\ u 0 0 0 0 '). type ĊĠĠĠ Ġif Ġ( type Ġis ĠPsi ArrayType Ġ&& Ġpsi Context Ġis ĠK t Ul tra Light Parameter Ġ&& Ġpsi Context . is Var Args ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPsi El lipsis Type ( type . component Type , Ġtype . annotation Provider ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtype Ċ } Ċ Ċ fun Ġtry Get Pre defined Name ( klass : ĠClass Descriptor ): ĠString ? Ġ{ ĊĠĠĠ Ġval Ġsource Class Ġ= Ġ( klass . source Ġas ? ĠKotlin Source Element )?. psi Ġas ? ĠK t Class Or Object ĊĊĠĠĠ Ġreturn Ġif Ġ( source Class ?. safe Is Local () Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ( source Class . name As Name Ġ?: ĠSpecial Names . NO _ NAME _ PROVIDED ). asString () ĊĠĠĠ Ġelse Ġnull Ċ } Ċ Ċ // ĠReturns Ġnull Ġwhen Ġtype Ġis Ġunchanged Ċ fun ĠKotlin Type . clean From Anonymous Types (): ĠKotlin Type ? Ġ{ ĊĠĠĠ Ġval ĠreturnType Class Ġ= Ġconstructor . declaration Descriptor Ġas ? ĠClass Descriptor Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġif Ġ( Descriptor Utils . is Anonymous Object ( returnType Class )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġchoose Ġjust Ġthe Ġfirst Ġsup ertype Ġbecause : ĊĠĠĠĠĠĠĠ Ġ// Ġ- ĠIn Ġpublic Ġdeclarations , Ġobject Ġliterals Ġshould Ġalways Ġhave Ġa Ġsingle Ġsup ertype Ġ( otherwise Ġit 's Ġan Ġerror ) ĊĠĠĠĠĠĠĠ Ġ// Ġ- ĠFor Ġprivate Ġdeclarations , Ġthey Ġmight Ġhave Ġmore Ġthan Ġone Ġsup ertype ĊĠĠĠĠĠĠĠ Ġ// ĠĠ Ġbut Ġit Ġlooks Ġlike Ġit 's Ġnot Ġimportant Ġhow Ġwe Ġchoose Ġa Ġrepresentative Ġfor Ġthem ĊĠĠĠĠĠĠĠ Ġval Ġrepresentative Ġ= ĠreturnType Class . default Type . sup ert ypes (). first OrNull () Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġrepresentative . clean From Anonymous Types () Ġ?: Ġrepresentative ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( arguments . isEmpty ()) Ġreturn Ġnull ĊĊĠĠĠ Ġvar Ġwas Updates Ġ= Ġfalse ĊĊĠĠĠ Ġval Ġnew Arguments Ġ= Ġarguments . map Ġ{ Ġtype Projection Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġupdated Type Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Projection . take Unless Ġ{ Ġit . is Star Projection Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . type ?. clean From Anonymous Types () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn @ map Ġtype Projection ĊĊĠĠĠĠĠĠĠ Ġwas Updates Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ ĠType Projection Impl ( type Projection . projection Kind , Ġupdated Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ(! was Updates ) Ġreturn Ġnull ĊĊĠĠĠ Ġreturn Ġreplace ( new Arguments Ġ= Ġnew Arguments ) Ċ } Ċ Ċ fun ĠK t Ul tra Light Class . create Generated Method From Descriptor ( ĊĠĠĠ Ġdescriptor : ĠFunction Descriptor , ĊĠĠĠ Ġdeclaration For Origin : ĠK t Declaration ? Ġ= Ġnull Ċ ): ĠK t Light Method Ġ{ ĊĊĠĠĠ Ġval Ġkotlin Origin Ġ= ĊĠĠĠĠĠĠĠ Ġdeclaration For Origin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠDescriptor To Source Utils . descriptor To Declaration ( descriptor ) Ġas ? ĠK t Declaration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġkotlin Origin ĊĊĠĠĠ Ġval Ġlight Member Origin Ġ= ĠLight Member Origin For Declaration ( kotlin Origin , ĠJ vm Declaration Origin Kind . OTHER ) ĊĊĠĠĠ Ġreturn ĠK t Ul tra Light Method For Descriptor ( descriptor , Ġlight Method ( descriptor ), Ġlight Member Origin , Ġsupport , Ġthis ) Ċ } Ċ Ċ private Ġfun ĠK t Ul tra Light Class . light Method ( ĊĠĠĠ Ġdescriptor : ĠFunction Descriptor Ċ ): ĠLight Method Builder Ġ{ ĊĠĠĠ Ġval Ġname Ġ= Ġif Ġ( descriptor Ġis ĠConstructor Descriptor ) Ġname Ġelse Ġsupport . type Mapper . map FunctionName ( descriptor , ĠOwner Kind . IMPLEMENT ATION ) ĊĊĠĠĠ Ġval Ġaccess Flags : ĠInt Ġby Ġlazy Pub Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġasm Flags Ġ= ĠA sm Util . getMethod Asm Flags ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOwner Kind . IMPLEMENT ATION , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport . deprecation Resolver , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport . type Mapper . jvm Default Mode , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġpack Method Flags ( asm Flags , ĠJ vm Code gen Util . is Jvm Interface ( kotlin Origin . resolve () Ġas ? ĠClass Descriptor )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠLight Method Builder ( ĊĠĠĠĠĠĠĠ Ġmanager , Ġlanguage , Ġname , ĊĠĠĠĠĠĠĠ ĠLight Parameter List Builder ( manager , Ġlanguage ), ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠLight Modifier List ( manager , Ġlanguage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Modifier Property ( name : ĠString ) Ġ= ĠModifier Flags . has Modifier Property ( name , Ġaccess Flags ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ private Ġfun Ġpack Common Flags ( access : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġflags Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ ĠisSet ( access , ĠOp codes . ACC _ PRIVATE ) Ġ-> ĠModifier Flags . PRIVATE _ MASK ĊĠĠĠĠĠĠĠ ĠisSet ( access , ĠOp codes . ACC _ PROTECT ED ) Ġ-> ĠModifier Flags . PROTECT ED _ MASK ĊĠĠĠĠĠĠĠ ĠisSet ( access , ĠOp codes . ACC _ PUBLIC ) Ġ-> ĠModifier Flags . PUBLIC _ MASK ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠModifier Flags . PACKAGE _ LOCAL _ MASK ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( isSet ( access , ĠOp codes . ACC _ STATIC )) Ġ{ ĊĠĠĠĠĠĠĠ Ġflags Ġ= Ġflags Ġor ĠModifier Flags . STATIC _ MASK ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( isSet ( access , ĠOp codes . ACC _ FINAL )) Ġ{ ĊĠĠĠĠĠĠĠ Ġflags Ġ= Ġflags Ġor ĠModifier Flags . FINAL _ MASK ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġflags Ċ } Ċ Ċ private Ġfun Ġpack Method Flags ( access : ĠInt , Ġis Interface : ĠBoolean ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġflags Ġ= Ġpack Common Flags ( access ) ĊĊĠĠĠ Ġif Ġ( isSet ( access , ĠOp codes . ACC _ SYN CH RON IZED )) Ġ{ ĊĠĠĠĠĠĠĠ Ġflags Ġ= Ġflags Ġor ĠModifier Flags . SYN CH RON IZED _ MASK ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( isSet ( access , ĠOp codes . ACC _ NATIVE )) Ġ{ ĊĠĠĠĠĠĠĠ Ġflags Ġ= Ġflags Ġor ĠModifier Flags . NATIVE _ MASK ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( isSet ( access , ĠOp codes . ACC _ STRICT )) Ġ{ ĊĠĠĠĠĠĠĠ Ġflags Ġ= Ġflags Ġor ĠModifier Flags . STRICT FP _ MASK ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( isSet ( access , ĠOp codes . ACC _ AB STR ACT )) Ġ{ ĊĠĠĠĠĠĠĠ Ġflags Ġ= Ġflags Ġor ĠModifier Flags . AB STR ACT _ MASK ĊĠĠĠ Ġ} Ġelse Ġif Ġ( is Interface Ġ&& Ġ! isSet ( access , ĠOp codes . ACC _ STATIC )) Ġ{ ĊĠĠĠĠĠĠĠ Ġflags Ġ= Ġflags Ġor ĠModifier Flags . DEFAULT _ MASK ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġflags Ċ } Ċ Ċ internal Ġfun ĠK t Modifier List Owner . is Hidden By De precation ( support : ĠK t Ul tra Light Support ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( annotation Entries . isEmpty ()) Ġreturn Ġfalse ĊĠĠĠ Ġval Ġannotations Ġ= Ġannotation Entries . filter Ġ{ Ġannotation Ġ-> ĊĠĠĠĠĠĠĠ Ġannotation . look s Like Deprecated () ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( annotations . isNotEmpty ()) Ġ{ Ġ// Ġsome Ġcandidates Ġfound ĊĠĠĠĠĠĠĠ Ġval Ġdeprecated Ġ= Ġsupport . find Annotation ( this , ĠKotlin Built Ins . FQ _ NAMES . deprecated )?. second ĊĠĠĠĠĠĠĠ Ġreturn Ġ( deprecated ?. argument Value (" level ") Ġas ? ĠEnum Value )?. enum Entry Name ?. asString () Ġ== Ġ" HIDDEN " ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠK t Annotation Entry . look s Like Deprecated (): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġarguments Ġ= Ġvalue Arguments . filter Is Instance < Kt Value Argument >(). filter Indexed Ġ{ Ġindex , Ġvalue Argument Ġ-> ĊĠĠĠĠĠĠĠ Ġindex Ġ== Ġ 2 Ġ|| Ġvalue Argument . look s Like Level Argument () Ġ// Ġfor Ġnamed / not Ġnamed Ġarguments ĊĠĠĠ Ġ} ĊĠĠĠ Ġfor Ġ( argument Ġin Ġarguments ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhidden By Dot Qualified Candidates Ġ= Ġargument . children . filter Is Instance < Kt Dot Qualified Expression >(). filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Child Ġ= Ġit . children . last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Child Ġis ĠK t Name Reference Expression ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Child . get Referenced Name () Ġ== Ġ" HIDDEN " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġhidden ByName Reference Expression Candidates Ġ= Ġargument . children . filter Is Instance < Kt Name Reference Expression >(). filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . get Referenced Name () Ġ== Ġ" HIDDEN " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( hidden By Dot Qualified Candidates . isNotEmpty () Ġ|| Ġhidden ByName Reference Expression Candidates . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse Ċ } Ċ Ċ fun ĠK t Value Argument . look s Like Level Argument (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġchildren . filter Is Instance < Kt Value Argument Name >(). any Ġ{ Ġit . as Name . asString () Ġ== Ġ" level " Ġ} Ċ } Ċ Ċ internal Ġfun ĠK t Annotated . is Jvm Static ( support : ĠK t Ul tra Light Support ): ĠBoolean Ġ= ĊĠĠĠ Ġsupport . find Annotation ( this , ĠJVM _ STATIC _ AN NOT ATION _ FQ _ NAME ) Ġ!== Ġnull Ċ Ċ internal Ġfun ĠK t Declaration . simple Visibility (): ĠString Ġ= Ġwhen Ġ{ ĊĠĠĠ Ġhas Modifier ( Kt Tokens . PRIVATE _ KEYWORD ) Ġ-> ĠPsi Modifier . PRIVATE ĊĠĠĠ Ġhas Modifier ( Kt Tokens . PROTECT ED _ KEYWORD ) Ġ-> ĠPsi Modifier . PROTECT ED ĊĠĠĠ Ġelse Ġ-> ĠPsi Modifier . PUBLIC Ċ } Ċ Ċ internal Ġfun ĠK t Modifier List Owner . is Deprecated ( support : ĠK t Ul tra Light Support ? Ġ= Ġnull ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġmodifier List Ġ= Ġthis . modifier List Ġ?: Ġreturn Ġfalse ĊĠĠĠ Ġif Ġ( modifier List . annotation Entries . isEmpty ()) Ġreturn Ġfalse ĊĊĠĠĠ Ġval Ġdeprecated Fq Name Ġ= ĠKotlin Built Ins . FQ _ NAMES . deprecated ĊĠĠĠ Ġval Ġdeprecated Name Ġ= Ġdeprecated Fq Name . short Name (). asString () ĊĊĠĠĠ Ġfor Ġ( annotation Entry Ġin Ġmodifier List . annotation Entries ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġit 's Ġnot Ġa Ġuser Ġtype , Ġit 's Ġdefinitely Ġnot Ġa Ġreference Ġto Ġdeprecated ĊĠĠĠĠĠĠĠ Ġval Ġtype Element Ġ= Ġannotation Entry . type Reference ?. type Element Ġas ? ĠK t User Type Ġ?: Ġcontinue ĊĊĠĠĠĠĠĠĠ Ġval Ġfq Name Ġ= Ġto QualifiedName ( type Element ) Ġ?: Ġcontinue ĊĊĠĠĠĠĠĠĠ Ġif Ġ( fq Name Ġ== Ġdeprecated Fq Name ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( fq Name . asString () Ġ== Ġdeprecated Name ) Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġsupport ?. find Annotation ( this , ĠKotlin Built Ins . FQ _ NAMES . deprecated ) Ġ!== Ġnull Ċ } Ċ Ċ private Ġfun Ġto QualifiedName ( user Type : ĠK t User Type ): ĠF q Name ? Ġ{ ĊĠĠĠ Ġval Ġreversed Names Ġ= ĠLists . newArrayList < String >() ĊĊĠĠĠ Ġvar Ġcurrent : ĠK t User Type ? Ġ= Ġuser Type ĊĠĠĠ Ġwhile Ġ( current Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġcurrent . referenced Name Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreversed Names . add ( name ) ĊĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġcurrent . qual ifier ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠF q Name . from Segments ( Container Util . reverse ( reversed Names )) Ċ } Ċ Ċ internal Ġfun ĠConstant Value <* >. create Psi Literal ( parent : ĠPsi Element ): ĠPsi Expression ? Ġ{ ĊĠĠĠ Ġval Ġas String Ġ= Ġas String For Psi Literal ( parent ) ĊĠĠĠ Ġval Ġinstance Ġ= ĠPsi Element Factory . getInstance ( parent . project ) ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġinstance . create Expression FromText ( asString , Ġparent ) ĊĠĠĠ Ġ} Ġcatch Ġ(_ : ĠInc orrect OperationException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġescape String ( str : ĠString ): ĠString Ġ= Ġbuild String Ġ{ ĊĠĠĠ Ġstr . forEach Ġ{ Ġchar Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġescaped Ġ= Ġwhen Ġ( char ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'\ n ' Ġ-> Ġ"\\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'\ r ' Ġ-> Ġ"\\ r " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'\ t ' Ġ-> Ġ"\\ t " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'\" ' Ġ-> Ġ"\\ \"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'\\ ' Ġ-> Ġ"\\ \ \" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"$ char " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġappend ( escaped ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠConstant Value <* >. asString For Psi Literal ( parent : ĠPsi Element ): ĠString Ġ= ĊĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠNull Value Ġ-> Ġ" null " ĊĠĠĠĠĠĠĠ Ġis ĠString Value Ġ-> Ġ"\" ${ escape String ( value )}\ "" ĊĠĠĠĠĠĠĠ Ġis ĠK Class Value Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġ( value Ġas ĠK Class Value . Value . Normal Class ). value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarray Part Ġ= Ġ" [] ". repeat ( value . array Nested ness ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfq Name Ġ= Ġvalue . class Id . as Single Fq Name () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcanonical Text Ġ= Ġpsi Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfq Name . asString (), Ġparent , Ġbox Primitive Type Ġ= Ġvalue . array Nested ness Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). let ( Type Conversion Util :: er asure ). getCanonical Text ( false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ canonical Text $ array Part . class " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠEnum Value Ġ-> Ġ"${ enum Class Id . as Single Fq Name (). asString ()}. $ enum Entry Name " ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> Ġ"${ value } L " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFloat Ġ-> Ġ"${ value } f " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ /*** Ċ Ġ* Ġ@ see Ġorg . jetbrains . kotlin . codegen . Implementation Body Code gen Ċ Ġ*/ Ċ fun ĠKotlin Type . try Resolve Marker Interface FQ Name (): ĠString ? Ġ{ ĊĊĠĠĠ Ġval Ġclass Id Ġ= Ġconstructor . declaration Descriptor . class Id ĊĊĠĠĠ Ġfor Ġ( mapping Ġin ĠJava To Kotlin Class Map . mut ability Mappings ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mapping . kotlin ReadOnly Ġ== Ġclass Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" kotlin . jvm . internal . markers . K Mapped Marker " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( mapping . kotlin Mutable Ġ== Ġclass Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" kotlin . jvm . internal . markers . K " Ġ+ Ġclass Id . relative ClassName . asString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" Mutable Entry ", Ġ" Entry ") Ġ// Ġkotlin . jvm . internal . markers . K Mutable Map . Entry Ġfor Ġsome Ġreason ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (".", Ġ"$ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ internal Ġinline Ġfun ĠProject . apply Compiler Plugins ( body : Ġ( Ul tra Light Class Modifier Extension ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠU l tra Light Class Modifier Extension . get Instances ( this ). forEach Ġ{ Ġbody ( it ) Ġ} Ċ } Ċ Ċ internal Ġfun Ġ< L Ġ: ĠAny > ĠL . invalid Access (): ĠNothing Ġ= ĊĠĠĠ Ġerror (" Cls Ġdelegate Ġshouldn 't Ġbe Ġloaded Ġfor Ġnot Ġtoo Ġcomplex Ġul tra - light Ġclasses ! ĠQual ified Ġname : Ġ${ java Class . name }") ĊĊ Ċ inline Ġfun Ġ< T > Ġrun Read Action ( cross inline Ġrunnable : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠ Ġreturn ĠApplication Manager . getApplication (). run Read Action ( Comp utable Ġ{ Ġrunnable () Ġ}) Ċ } Ċ Ċ inline Ġfun ĠK t Class Or Object . safe Is Local (): ĠBoolean Ġ= Ġrun Read Action Ġ{ Ġthis . is Local Ġ} Ċ Ċ inline Ġfun ĠK t File . safe Is Script () Ġ= Ġrun Read Action Ġ{ Ġthis . is Script () Ġ} Ċ Ċ inline Ġfun ĠK t File . safe Script () Ġ= Ġrun Read Action Ġ{ Ġthis . script Ġ}