package Ġorg . jl le its ch uh . pmd kotlin . lang . kotlin Ċ Ċ import Ġcom . intellij . lang . AST Node Ċ import Ġcom . intellij . lang . impl . Psi Builder Impl Ċ import Ġcom . intellij . psi . impl . source . tree . File Element Ċ import Ġnet . sourceforge . pmd . lang . Parser Ċ import Ġnet . sourceforge . pmd . lang . Parser Options Ċ import Ġnet . sourceforge . pmd . lang . Token Manager Ċ import Ġnet . sourceforge . pmd . lang . ast . ParseException Ċ import Ġorg . jetbrains . kotlin . Kt Node Types Ċ import Ġorg . jetbrains . kotlin . psi . Kt Element Ċ import Ġorg . jl le its ch uh . pmd kotlin . lang . kotlin . ast . Abstract Kotlin Node Ċ import Ġorg . jl le its ch uh . pmd kotlin . lang . kotlin . ast . Kotlin AST Node Adapter Ċ import Ġjava . io . Reader Ċ Ċ class ĠKotlin Parser ( private Ġval Ġparser Options : ĠParser Options ) Ġ: ĠParser Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġparser : Ġorg . jetbrains . kotlin . parsing . Kotlin Parser ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintended Parser Ġ= ĠKotlin File Context . parser Definition . create Parser ( Kotlin File Context . project ) ĊĠĠĠĠĠĠĠ Ġif Ġ( int ended Parser Ġis Ġorg . jetbrains . kotlin . parsing . Kotlin Parser ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser Ġ= Ġintended Parser ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Kotlin Parser Ġnot Ġfound !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Parser Options (): ĠParser Options Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . parser Options ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetToken Manager ( s : ĠString , Ġreader : ĠReader ): ĠToken Manager Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠKotlin Token Manager ( Kotlin File Context ( s , Ġreader )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcan Parse (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Tree ( v : ĠAST Node , Ġprefix : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( v Ġ! is ĠFile Element ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println ("$ prefix ${ v . psi . java Class . simple Name } Ġ(${ v . psi . text . replace ("\ n ", Ġ"\\ n "). replace ("\ t ", Ġ" Ġ"). replace (" Ġ Ġ", Ġ" Ġ") }) Ġ[ ${ v . psi Ġis ĠK t Element }] ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( cv Ġin Ġv . getChildren ( null )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Tree ( cv , Ġprefix Ġ+ Ġ" Ġ Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( ParseException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġparse ( fileName : ĠString , Ġsource : ĠReader ): ĠAbstract Kotlin Node Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Context Ġ= ĠKotlin File Context ( fileName , Ġsource ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠPsi Builder Impl ( Kotlin File Context . project , Ġkotlin Context . psi File , ĠKotlin File Context . parser Definition , ĠKotlin Token Manager ( kotlin Context ), Ġnull , Ġkotlin Context . getSource Code (), Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġparser ?. parse ( Kt Node Types . KT _ FILE , Ġbuilder , Ġkotlin Context . psi File ) Ġas ĠFile Element ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . psi Ġ= Ġkotlin Context . psi File . node . psi ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Tree ( root , Ġ"| ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKotlin AST Node Adapter ( root . psi , Ġkotlin Context ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Suppress Map (): ĠMap < Int , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠHashMap () ĊĠĠĠ Ġ} Ċ } Ċ