/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 Ġ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 . fir . tree . generator . util Ċ Ċ import Ġorg . jetbrains . kotlin . fir . tree . generator . context . Abstract F ir Tree Builder Ċ import Ġorg . jetbrains . kotlin . fir . tree . generator . model . Implementation Ċ import Ġjava . io . File Ċ Ċ fun Ġprint Hierarchy Graph ( builder : ĠAbstract F ir Tree Builder ) Ġ{ ĊĠĠĠ Ġfun ĠImplementation . Kind . to Color (): ĠString Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ ĠImplementation . Kind . Interface Ġ-> Ġ" green " ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" red " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġelements Ġ= Ġbuilder . elements ĊĊĠĠĠ Ġdata Ġclass ĠEdge ( val Ġfrom : ĠString , Ġval Ġto : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ from Ġ-> Ġ$ to " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġ( interfaces , Ġclasses ) Ġ= Ġelements . partition Ġ{ Ġit . kind Ġ== ĠImplementation . Kind . Interface Ġ} ĊĠĠĠ Ġprintln (" Interfaces : Ġ${ interfaces . size }") ĊĠĠĠ Ġprintln (" Classes : Ġ${ classes . size }") ĊĊĠĠĠ ĠFile (" F ir Tree . dot "). print Writer (). use Ġ{ Ġprinter Ġ-> ĊĠĠĠĠĠĠĠ Ġwith ( printer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" dig raph ĠF ir Tree Ġ{ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelements . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" ĠĠĠ Ġ${ it . type } Ġ[ color =${ it . kind !!. to Color ()} ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedges Ġ= Ġmutable Set Of < Edge >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelements . forEach Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . all Parents . forEach Ġ{ Ġparent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedges Ġ+= ĠEdge ( parent . type , Ġelement . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedges . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" ĠĠĠ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ