package Ġorg . jetbrains . u ast . test . kotlin Ċ Ċ import Ġcom . intellij . psi . Psi Annotation Ċ import Ġcom . intellij . psi . Psi Modifier Ċ import Ġcom . intellij . test Framework . Use ful TestCase Ċ import Ġorg . jetbrains . kotlin . as Java . to Light Annotation Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . getParent OfType Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . getValue Parameter List Ċ import Ġorg . jetbrains . kotlin . test . test Framework . Kt Use ful TestCase Ċ import Ġorg . jetbrains . kotlin . utils . addTo Std lib . cast Ċ import Ġorg . jetbrains . u ast .* Ċ import Ġorg . jetbrains . u ast . kotlin . Kotlin U ast Language Plugin Ċ import Ġorg . jetbrains . u ast . test . env . findElement By Text Ċ import Ġorg . jetbrains . u ast . test . env . findElement By Text From Psi Ċ import Ġorg . jetbrains . u ast . visitor . Abstract U ast Visitor Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Test ĊĊ Ċ class ĠKotlin U ast Api Test Ġ: ĠAbstract Kotlin U ast Test () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcheck ( test Name : ĠString , Ġfile : ĠU File ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Annotation Parameters () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" Annotation Parameters ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotation Ġ= Ġfile . findElement By Text < U Annotation >(" @ Int Range ( from Ġ= Ġ 1 0 , Ġto Ġ= Ġ 0 )") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( annotation . find AttributeValue (" from ") ?. evaluate (), Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Attribute Ġ= Ġannotation . find AttributeValue (" to ") !! ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( to Attribute . evaluate (), Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK t Use ful TestCase . assertInstanceOf ( annotation . psi . to U Element (), ĠU Annotation :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK t Use ful TestCase . assertInstanceOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation . psi . cast < Kt Annotation Entry >(). to Light Annotation (). to U Element (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU Annotation :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK t Use ful TestCase . assertInstanceOf ( to Attribute . u ast Parent , ĠU Named Expression :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK t Use ful TestCase . assertInstanceOf ( to Attribute . psi . to U Element ()?. u ast Parent , ĠU Named Expression :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Convert String Template () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" String Template In Class ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġliteral Expression Ġ= Ġfile . findElement By Text < UL iteral Expression >(" lo rem ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpsi Ġ= Ġliteral Expression . psi !! ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( psi Ġis ĠK t Literal String Template Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġliteral Expression Again Ġ= Ġpsi . to U Element () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( literal Expression Again Ġis ĠU Literal Expression ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Convert String Template With Expected Type () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" String Template With Var ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġfile . psi . text . indexOf (" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Template Ġ= Ġfile . psi . findElement At ( index ) !!. getParent OfType < Kt String Template Expression >( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu Literal Ġ= Ġstring Template . to U Element OfType < UL iteral Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( u Literal ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Name Containing File () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" Name Containing File ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfoo Ġ= Ġfile . findElement By Text < U Class >(" class ĠFoo ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( file . psi , Ġfoo . name Identifier !!. containing File ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbar Ġ= Ġfile . findElement By Text < U Method >(" fun Ġbar () Ġ{} ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( file . psi , Ġbar . name Identifier !!. containing File ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġxy zz y Ġ= Ġfile . findElement By Text < U Variable >(" val Ġxy zz y : ĠInt Ġ= Ġ 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( file . psi , Ġxy zz y . name Identifier !!. containing File ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Interface Method With Body () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" Default Imp ls ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbar Ġ= Ġfile . findElement By Text < U Method >(" fun Ġbar () Ġ= Ġ\" Hello ! \" ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( bar . containing File . text !! , Ġbar . psi . modifier List . has Explicit Modifier ( Psi Modifier . DEFAULT )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( bar . containing File . text !! , Ġbar . psi . modifier List . has Modifier Property ( Psi Modifier . DEFAULT )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest SAM () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" SAM ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( file . findElement By Text < UL ambda Expression >(" { Ġ/* ĠNot ĠSAM Ġ*/ Ġ} "). functional Interface Type ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" java . lang . Runnable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . findElement By Text < UL ambda Expression >(" { /* ĠVariable Ġ*/} "). functional Interface Type ?. canonical Text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" java . lang . Runnable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . findElement By Text < UL ambda Expression >(" { /* ĠAssignment Ġ*/} "). functional Interface Type ?. canonical Text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" java . lang . Runnable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . findElement By Text < UL ambda Expression >(" { /* ĠType ĠCast Ġ*/} "). functional Interface Type ?. canonical Text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" java . lang . Runnable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . findElement By Text < UL ambda Expression >(" { /* ĠArgument Ġ*/} "). functional Interface Type ?. canonical Text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" java . lang . Runnable ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . findElement By Text < UL ambda Expression >(" { /* ĠReturn Ġ*/} "). functional Interface Type ?. canonical Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Parameter Property With Annotation () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" Parameter Property With Annotation ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest 1 Ġ= Ġfile . classes . find Ġ{ Ġit . name Ġ== Ġ" Test 1 " Ġ} !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstructor 1 Ġ= Ġtest 1 . methods . find Ġ{ Ġit . name Ġ== Ġ" Test 1 " Ġ} !! ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( constructor 1 . u ast Parameters . first (). annotations . any Ġ{ Ġit . qualified Name Ġ== Ġ" My Annotation " Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgetter 1 Ġ= Ġtest 1 . methods . find Ġ{ Ġit . name Ġ== Ġ" get Bar " Ġ} !! ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( getter 1 . annotations . any Ġ{ Ġit . qualified Name Ġ== Ġ" My Annotation " Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsetter 1 Ġ= Ġtest 1 . methods . find Ġ{ Ġit . name Ġ== Ġ" set Bar " Ġ} !! ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( setter 1 . annotations . any Ġ{ Ġit . qualified Name Ġ== Ġ" My Annotation " Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( setter 1 . u ast Parameters . first (). annotations . any Ġ{ Ġit . qualified Name Ġ== Ġ" My Annotation " Ġ}) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest 2 Ġ= Ġfile . classes . find Ġ{ Ġit . name Ġ== Ġ" Test 2 " Ġ} !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstructor 2 Ġ= Ġtest 2 . methods . find Ġ{ Ġit . name Ġ== Ġ" Test 2 " Ġ} !! ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( constructor 2 . u ast Parameters . first (). annotations . any Ġ{ Ġit . qualified Name ?. startsWith (" My Annotation ") Ġ?: Ġfalse Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgetter 2 Ġ= Ġtest 2 . methods . find Ġ{ Ġit . name Ġ== Ġ" get Bar " Ġ} !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgetter 2 . annotations . single Ġ{ Ġit . qualified Name Ġ== Ġ" My Annotation " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsetter 2 Ġ= Ġtest 2 . methods . find Ġ{ Ġit . name Ġ== Ġ" set Bar " Ġ} !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetter 2 . annotations . single Ġ{ Ġit . qualified Name Ġ== Ġ" My Annotation 2 " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetter 2 . u ast Parameters . first (). annotations . single Ġ{ Ġit . qualified Name Ġ== Ġ" My Annotation 3 " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest 2 . fields . find Ġ{ Ġit . name Ġ== Ġ" bar " Ġ} !!. annotations . single Ġ{ Ġit . qualified Name Ġ== Ġ" My Annotation 5 " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Convert Type In Annotation () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" Type In Annotation ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġfile . psi . text . indexOf (" Test ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġfile . psi . findElement At ( index ) !!. getParent OfType < Kt User Type >( false ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( element . get U ast Parent OfType ( U Annotation :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest El vis Type () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" El vis Type ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġel vis Expression Ġ= Ġfile . findElement By Text < U Expression >(" text Ġ?: Ġreturn ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" String ", Ġel vis Expression . get Expression Type () !!. present able Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Find Attribute DefaultValue () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" Annotation Parameters ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw it DefaultValue Ġ= Ġfile . findElement By Text < U Annotation >(" @ With DefaultValue ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 4 2 , Ġw it DefaultValue . find AttributeValue (" value ") !!. evaluate ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 4 2 , Ġw it DefaultValue . find AttributeValue ( null ) !!. evaluate ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest If Condition () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" If Statement ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpsi File Ġ= Ġfile . psi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġpsi File . findElement At ( psi File . text . indexOf ("\" abc \"" )) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinary Expression Ġ= Ġelement . getParent OfType < Kt Binary Expression >( false ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu Binary Expression Ġ= ĠKotlin U ast Language Plugin (). convert Element With Parent ( binary Expression , Ġnull ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUseful TestCase . assertInstanceOf ( u Binary Expression . u ast Parent , ĠU If Expression :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest When StringLiteral () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" When StringLiteral ") Ġ{ Ġ_, Ġfile Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . findElement By Text From Psi < UL iteral Expression >(" abc "). let Ġ{ Ġliteral Expression Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpsi Ġ= Ġliteral Expression . psi !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( psi Ġis ĠK t Literal String Template Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUseful TestCase . assertInstanceOf ( literal Expression . u ast Parent , ĠU Switch Clause Expression With Body :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . findElement By Text From Psi < UL iteral Expression >(" def "). let Ġ{ Ġliteral Expression Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpsi Ġ= Ġliteral Expression . psi !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( psi Ġis ĠK t Literal String Template Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUseful TestCase . assertInstanceOf ( literal Expression . u ast Parent , ĠU Switch Clause Expression With Body :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . findElement By Text From Psi < UL iteral Expression >(" def 1 "). let Ġ{ Ġliteral Expression Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpsi Ġ= Ġliteral Expression . psi !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( psi Ġis ĠK t Literal String Template Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUseful TestCase . assertInstanceOf ( literal Expression . u ast Parent , ĠU Block Expression :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest When And Dest ruct ing () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" When And Dest ruct ing ") Ġ{ Ġ_, Ġfile Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . findElement By Text From Psi < U Expression >(" val Ġ( binding Context , Ġstatement Filter ) Ġ= Ġarr "). let Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu Block Expression Ġ= Ġe . getParent OfType < U Block Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertNotNull ( u Block Expression ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu Method Ġ= Ġu Block Expression !!. getParent OfType < U Method >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertNotNull ( u Method ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Broken MethodType Resolve () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" Broken Method ") Ġ{ Ġ_, Ġfile Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . accept ( object Ġ: ĠAbstract U ast Visitor () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Call Expression ( node : ĠU Call Expression ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . returnType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Simple Annotated () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" Simple Annotated ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . findElement By Text From Psi < U Field >(" @ Since Kotlin (\" 1 . 0 \") \ n ĠĠĠ Ġval Ġproperty : ĠString Ġ= Ġ\" M ary \"" ). let Ġ{ Ġfield Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotation Ġ= Ġfield . annotations . assert ed Find (" kotlin . Since Kotlin ") Ġ{ Ġit . qualified Name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( annotation . find Declared AttributeValue (" version ") ?. evaluate String (), Ġ" 1 . 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun ĠU File . check U ast Super Types ( ref Text : ĠString , Ġsuper Types : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Element By Text From Psi < U Class >( ref Text , Ġfalse ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" base Ġclasses ", Ġsuper Types , Ġit . u ast Super Types . map Ġ{ Ġit . get QualifiedName () Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Super Types () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" Super Calls ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . check U ast Super Types (" B ", ĠlistOf (" A ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . check U ast Super Types (" O ", ĠlistOf (" A ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . check U ast Super Types (" inner Object Ġ", ĠlistOf (" A ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . check U ast Super Types (" Inner Class ", ĠlistOf (" A ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . check U ast Super Types (" object Ġ: ĠA (\" text For An on \") ", ĠlistOf (" A ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Anonymous Super Types () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" Anonymous ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . check U ast Super Types (" object Ġ: ĠRunnable Ġ{ Ġoverride Ġfun Ġrun () Ġ{} Ġ} ", ĠlistOf (" java . lang . Runnable ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . check U ast Super Types ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" object Ġ: ĠRunnable , ĠClose able Ġ{ Ġoverride Ġfun Ġclose () Ġ{} Ġoverride Ġfun Ġrun () Ġ{} Ġ} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" java . lang . Runnable ", Ġ" java . io . Closeable ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . check U ast Super Types ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" object Ġ: ĠInputStream (), ĠRunnable Ġ{ Ġoverride Ġfun Ġread (): ĠInt Ġ= Ġ 0 ; Ġoverride Ġfun Ġrun () Ġ{} Ġ} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" java . io . InputStream ", Ġ" java . lang . Runnable ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Literal Arrays Types () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" Annotation Parameters ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . findElement By Text From Psi < U Call Expression >(" int ArrayOf ( 1 , Ġ 2 , Ġ 3 ) "). let Ġ{ Ġfield Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Psi Type : int [] ", Ġfield . returnType . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . findElement By Text From Psi < U Call Expression >(" [ 1 , Ġ 2 , Ġ 3 ]"). let Ġ{ Ġfield Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Psi Type : int [] ", Ġfield . returnType . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Psi Type : int ", Ġfield . type Arguments . single (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . findElement By Text From Psi < U Call Expression >(" [\" a \", Ġ\" b \", Ġ\" c \"] "). let Ġ{ Ġfield Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Psi Type : String [] ", Ġfield . returnType . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Psi Type : String ", Ġfield . type Arguments . single (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Type Aliases () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test (" Type Aliases ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg Ġ= Ġ( file . psi Ġas ĠK t File ). declarations . single Ġ{ Ġit . name Ġ== Ġ" G " Ġ} Ġas ĠK t Type Alias ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Type Ġ= Ġg . getType Reference () !!. type Element Ġas ĠK t FunctionType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Type Parameters Ġ= Ġoriginal Type . parameter List . to U Element () Ġas ĠU Declarations Expression ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue (( original Type Parameters . declarations . single () Ġas ĠU Parameter ). type . isValid ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Nested Annotation () Ġ= Ġdo Test (" Annotation Complex ") Ġ{ Ġ_, Ġfile Ġ-> ĊĠĠĠĠĠĠĠ Ġfile . findElement By Text From Psi < U Element >(" @ Annotation Array ( value Ġ= ĠAnnotation ()) ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. findElement By Text From Psi < U Element >(" Annotation () ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. source Psi Element ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġreference Expression Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconverted U Annotation Ġ= Ġreference Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. cast < Kt Reference Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to U Element OfType < U Annotation >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠAssertionError (" hav en 't Ġgot Ġannotation Ġfrom Ġ$ reference Expression (${ reference Expression ?. java Class }) ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Annotation ", Ġconverted U Annotation . qualified Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlight Annotation Ġ= Ġconverted U Annotation . getAs Java Psi Element ( Psi Annotation :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠAssertionError (" can 't Ġget Ġlight Annotation Ġfrom Ġ$ converted U Annotation ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Annotation ", Ġlight Annotation . qualified Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ Ċ fun Ġ< T , ĠR > ĠIterable < T >. assert ed Find ( value : ĠR , Ġtransform : Ġ( T ) Ġ-> ĠR ): ĠT Ġ= Ġfind Ġ{ Ġtransform ( it ) Ġ== Ġvalue Ġ} Ġ?: Ġthrow ĠAssertionError ("' $ value ' Ġnot Ġfound , Ġonly Ġ${ this . join ToString Ġ{ Ġtransform ( it ). toString () Ġ}} ") Ċ