package Ġtest Ċ Ċ import Ġcom . google . auto . service . Auto Service Ċ import Ġcom . r net t . plugin . get Ċ import Ġorg . jetbrains . kotlin . backend . common . extensions . Ir Generation Extension Ċ import Ġorg . jetbrains . kotlin . backend . common . extensions . Ir Plugin Context Ċ import Ġorg . jetbrains . kotlin . cli . common . CLI Configuration Keys Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Message Collector Ċ import Ġorg . jetbrains . kotlin . com . intellij . mock . Mock Project Ċ import Ġorg . jetbrains . kotlin . compiler . plugin . Abstract Cli Option Ċ import Ġorg . jetbrains . kotlin . compiler . plugin . CommandLine Processor Ċ import Ġorg . jetbrains . kotlin . compiler . plugin . Component Registrar Ċ import Ġorg . jetbrains . kotlin . config . Compiler Configuration Ċ import Ġorg . jetbrains . kotlin . ir . Ir Element Ċ import Ġorg . jetbrains . kotlin . ir . declarations . Ir Annotation Container Ċ import Ġorg . jetbrains . kotlin . ir . declarations . Ir Module Fragment Ċ import Ġorg . jetbrains . kotlin . ir . util . dump Ċ import Ġorg . jetbrains . kotlin . ir . visitor s . Ir Element Visitor Void Ċ import Ġorg . jetbrains . kotlin . ir . visitor s . accept Children Void Ċ import Ġorg . jetbrains . kotlin . ir . visitor s . accept Void Ċ import Ġtest . generation . Names . tester . second . Test Annotation Ċ import Ġtest . generation . Names . tester . second . Test Enum Ċ import Ġjava . io . File Ċ Ċ private Ġval Ġlog File Ġby Ġlazy Ġ{ ĊĠĠĠ ĠFile (" C :\\ Users \\ j im ne \\ Google ĠDrive \\ My ĠSt uff \\ compiler - plugin - reference \\ test \\ usage \\ log . txt "). also Ġ{ ĊĠĠĠĠĠĠĠ Ġit . delete () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġlog ( key : ĠString , Ġdata : ĠAny ?) Ġ{ ĊĠĠĠ Ġlog File . append Text ("$ key : Ġ$ data ") Ċ } Ċ Ċ fun Ġlog ( str : ĠAny ?) Ġ{ ĊĠĠĠ Ġlog File . append Text ( str . toString ()) Ċ } Ċ Ċ fun Ġlog ( key : ĠString , Ġir : ĠIr Element ) Ġ{ ĊĠĠĠ Ġlog File . append Text ("$ key :\ n ${ ir . dump ( true )}\ n \ n ") Ċ } Ċ Ċ @ Auto Service ( CommandLine Processor :: class ) Ċ class ĠPlugin Export CommandLine Processor Ġ: ĠCommandLine Processor Ġ{ ĊĠĠĠ Ġoverride Ġval Ġplugin Id : ĠString Ġ= Ġ" test . compiler - plugin " ĊĠĠĠ Ġoverride Ġval Ġplugin Options : ĠCollection < Abstract Cli Option > Ġ= ĠlistOf () Ċ } Ċ Ċ @ Auto Service ( Component Registrar :: class ) Ċ class ĠPlugin Export Component Registrar Ġ: ĠComponent Registrar Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġregister Project Components ( project : ĠMock Project , Ġconfiguration : ĠCompiler Configuration ) Ġ{ ĊĠĠĠĠĠĠĠ ĠIr Generation Extension . register Extension ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlugin Export Ir Generation Extension ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCLI Configuration Keys . MESSAGE _ COLLECT OR _ KEY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessage Collector . NONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠPlugin Export Ir Generation Extension ( val Ġmessage Collector : ĠMessage Collector ) Ġ: ĠIr Generation Extension Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġgenerate ( module Fragment : ĠIr Module Fragment , Ġplugin Context : ĠIr Plugin Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" Test ") ĊĠĠĠĠĠĠĠ Ġwith ( plugin Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Fragment . accept Void ( object Ġ: ĠIr Element Visitor Void Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Element ( element : ĠIr Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element Ġis ĠIr Annotation Container ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement [ Test Annotation , Ġplugin Context ]?. let Ġ{ Ġinstance Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" Instance ", Ġinstance ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO Ġtoo Ġhard . Ġ ĠUse Ġsealed Ġclass Ġfor Ġenum Ġentries , Ġmaybe ? Ġ ĠKind / Entries Ġas Ġenum , ĠInstances Ġas Ġsealed Ġthat Ġextend ĠDeleg ating Symbol / Resolved . Ġ ĠAnnotation Ġparams Ġas ĠInstances . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġinstance . e Ġis ĠTest Enum . One ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . accept Children Void ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnames Ġ= ĠNames ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }