package Ġdk . cache t . de te kt . extensions . psi Ċ Ċ import Ġio . github . de te kt . parser . create Kotlin Core Environment Ċ import Ġio . github . de te kt . test . utils . compile Content For Test Ċ import Ġorg . jetbrains . kotlin . cli . jvm . compiler . Kotlin Core Environment Ċ import Ġorg . jetbrains . kotlin . cli . jvm . compiler . No Scope Record Cli Binding Trace Ċ import Ġorg . jetbrains . kotlin . cli . jvm . compiler . Top Down Analyzer Facade For JVM Ċ import Ġorg . jetbrains . kotlin . psi . Kt Class Or Object Ċ import Ġorg . jetbrains . kotlin . psi . Kt File Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . declarations . File Based Declaration Provider Factory Ċ import Ġorg . junit . jupiter . api . Assertions .* Ċ import Ġorg . spe k framework . spe k 2 . Spe k ĊĊ Ċ class ĠK t Class Or Object Spec Ġ: ĠSpe k ({ ĊĠĠĠ Ġgroup ( Ġ" has Annotation In Hierarchy " Ġ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġtest (" has Annotation In Hierarchy Ġfinds Ġfully Ġqualified Ġannotation Ġname Ġon Ġclass " Ġ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġsome ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Ġclass ĠAnnotation ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Annotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠAnnot ated ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Or Object Ġ= Ġcompile And Find Class ( Ġcode , Ġ" Annotated " Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Annotation Ġ= Ġclass Or Object . has Annotation In Hierarchy ( Ġ" some . Annotation " Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( Ġhas Annotation Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" has Annotation In Hierarchy Ġfinds Ġfully Ġqualified Ġannotation Ġname Ġon Ġinterface " Ġ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġsome ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Ġclass ĠAnnotation ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Annotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterface ĠAnnot ated ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Or Object Ġ= Ġcompile And Find Class ( Ġcode , Ġ" Annotated " Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Annotation Ġ= Ġclass Or Object . has Annotation In Hierarchy ( Ġ" some . Annotation " Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( Ġhas Annotation Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest ( Ġ" has Annotation In Hierarchy Ġis Ġfalse Ġwhen Ġannotation Ġis Ġnot Ġpresent " Ġ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġ" class ĠUn annotated " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Or Object Ġ= Ġcompile And Find Class ( Ġcode , Ġ" Un annotated " Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Annotation Ġ= Ġclass Or Object . has Annotation In Hierarchy ( Ġ" Annotation " Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( Ġhas Annotation Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest ( Ġ" has Annotation In Hierarchy Ġfinds Ġannotation Ġon Ġbase Ġclass " Ġ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Ġclass ĠAnnotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Annotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabstract Ġclass ĠBaseClass ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠExt ending Class Ġ: ĠBaseClass () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Or Object Ġ= Ġcompile And Find Class ( Ġcode , Ġ" Ext ending Class " Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Annotation Ġ= Ġclass Or Object . has Annotation In Hierarchy ( Ġ" Annotation " Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( Ġhas Annotation Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest ( Ġ" has Annotation In Hierarchy Ġfinds Ġannotation Ġon Ġbase Ġinterface " Ġ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Ġclass ĠAnnotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Annotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterface ĠBase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠExt ending Class Ġ: ĠBase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Or Object Ġ= Ġcompile And Find Class ( Ġcode , Ġ" Ext ending Class " Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Annotation Ġ= Ġclass Or Object . has Annotation In Hierarchy ( Ġ" Annotation " Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( Ġhas Annotation Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest ( Ġ" has Annotation In Hierarchy Ġfinds Ġannotation Ġdeeper Ġin Ġhierarchy " Ġ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Ġclass ĠAnnotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabstract Ġclass ĠBase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabstract Ġclass ĠInter mediate Ġ: ĠBase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Annotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠExt ending Class Ġ: ĠInter mediate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Or Object Ġ= Ġcompile And Find Class ( Ġcode , Ġ" Ext ending Class " Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Annotation Ġ= Ġclass Or Object . has Annotation In Hierarchy ( Ġ" Annotation " Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( Ġhas Annotation Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest ( Ġ" has Annotation In Hierarchy Ġfails Ġfor Ġtypes Ġwhich Ġcan 't Ġbe Ġresolved " Ġ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Ġclass ĠAnnotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠAnnot ated Ġ: ĠAny () Ġ// ĠAny Ġis Ġin Ġstdlib Ġand Ġcan 't Ġbe Ġresolved . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Or Object Ġ= Ġcompile And Find Class ( Ġcode , Ġ" Annotated " Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThrows ( ĠType Resolution Exception :: class . java Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Or Object . has Annotation In Hierarchy ( Ġ" Annotation " Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest ( Ġ" has Annotation In Hierarchy Ġignores Ġassume Has No Annotation Ġtype Ġnames " Ġ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Ġclass ĠAnnotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠAnnot ated Ġ: ĠAny () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Or Object Ġ= Ġcompile And Find Class ( Ġcode , Ġ" Annotated " Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Annotation Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Or Object . has Annotation In Hierarchy ( Ġ" Annotation ", ĠlistOf ( Ġ" kotlin . Any " Ġ) Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( Ġhas Annotation Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest ( Ġ" has Annotation In Hierarchy Ġignores Ġassume Has Annotation Ġtype Ġnames Ġrecursively " Ġ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Ġclass ĠAnnotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠBase Ġ: ĠAny () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠAnnot ated Ġ: ĠBase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Or Object Ġ= Ġcompile And Find Class ( Ġcode , Ġ" Annotated " Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Annotation Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Or Object . has Annotation In Hierarchy ( Ġ" Annotation ", ĠlistOf ( Ġ" kotlin . Any " Ġ) Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( Ġhas Annotation Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) ĊĊ Ċ private Ġdata Ġclass ĠComp iled Class Or Object ( ĊĠĠĠ Ġprivate Ġval Ġclass Or Object : ĠK t Class Or Object , ĊĠĠĠ Ġprivate Ġval Ġbinding Context : ĠBinding Context Ġ) Ċ { ĊĠĠĠ Ġfun Ġhas Annotation In Hierarchy ( ĊĠĠĠĠĠĠĠ Ġfully Qualified Annotation Name : ĠString , ĊĠĠĠĠĠĠĠ Ġassume Has No Annotation : ĠList < String > Ġ= Ġempty List () ĊĠĠĠ Ġ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġclass Or Object . has Annotation In Hierarchy ( Ġfully Qualified Annotation Name , Ġbinding Context , Ġassume Has No Annotation Ġ) Ċ } ĊĊ Ċ private Ġfun Ġcompile And Find Class ( Ġcode : ĠString , Ġname : ĠString Ġ): ĠComp iled Class Or Object Ċ { ĊĠĠĠ Ġval Ġfile : ĠK t File Ġ= Ġcompile Content For Test ( Ġcode Ġ) ĊĠĠĠ Ġval Ġclass Or Object : ĠK t Class Or Object Ġ= ĊĠĠĠĠĠĠĠ Ġfile . children . filter Is Instance < Kt Class Or Object >(). first Ġ{ Ġit . name Ġ== Ġname Ġ} ĊĊĠĠĠ Ġval Ġenv : ĠKotlin Core Environment Ġ= Ġcreate Kotlin Core Environment () Ġ// ĠN eeded Ġfor Ġtype Ġresolution . ĊĠĠĠ Ġval Ġbinding Context : ĠBinding Context Ġ= ĠgetContext For Paths ( Ġenv , ĠlistOf ( Ġfile Ġ) Ġ) ĊĊĠĠĠ Ġreturn ĠComp iled Class Or Object ( Ġclass Or Object , Ġbinding Context Ġ) Ċ } Ċ Ċ private Ġfun ĠgetContext For Paths ( Ġenvironment : ĠKotlin Core Environment , Ġpaths : ĠList < Kt File > Ġ) Ġ= ĊĠĠĠ ĠTop Down Analyzer Facade For JVM . analyze Files With Java Integration ( ĊĠĠĠĠĠĠĠ Ġenvironment . project , ĊĠĠĠĠĠĠĠ Ġpaths , ĊĠĠĠĠĠĠĠ ĠNo Scope Record Cli Binding Trace (), ĊĠĠĠĠĠĠĠ Ġenvironment . configuration , ĊĠĠĠĠĠĠĠ Ġenvironment :: create Package Part Provider , ĊĠĠĠĠĠĠĠ Ġ:: File Based Declaration Provider Factory ĊĠĠĠ Ġ). binding Context Ċ