/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠGoogle ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ġyou Ġmay Ġnot Ċ Ġ* Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ċ Ġ* Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT Ċ Ġ* ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . ĠSee Ġthe Ċ Ġ* ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ġunder Ċ Ġ* Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . google . j 2 cl . transp iler . backend . kotlin Ċ Ċ import Ġcom . google . j 2 cl . transp iler . ast . Kind Ċ import Ġcom . google . j 2 cl . transp iler . ast . Type Ċ import Ġcom . google . j 2 cl . transp iler . ast . Type Declaration Ċ import Ġcom . google . j 2 cl . transp iler . ast . Type Descriptors . is Java Lang Object Ċ import Ġjava . util . stream . Collectors Ċ Ċ fun ĠRenderer . render Type ( type : ĠType ) Ġ{ ĊĠ Ġif Ġ( type . is Class Ġ&& Ġ! type . declaration . is Final ) Ġ{ ĊĠĠĠ Ġif Ġ( type . declaration . is Abstract ) Ġrender (" abstract Ġ") Ġelse Ġrender (" open Ġ") ĊĠ Ġ} ĊĠ Ġrender ( ĊĠĠĠ Ġwhen Ġ( type . kind ) Ġ{ ĊĠĠĠĠĠ ĠKind . CLASS Ġ-> Ġ" class Ġ" ĊĠĠĠĠĠ ĠKind . ENUM Ġ-> Ġ" enum Ġclass Ġ" ĊĠĠĠĠĠ ĠKind . INTERFACE Ġ-> Ġ( if Ġ( type . declaration . is Functional Interface ) Ġ" fun Ġ" Ġelse Ġ"") Ġ+ Ġ" interface Ġ" ĊĠĠĠ Ġ} ĊĠ Ġ) ĊĠ Ġrender Type Declaration ( type . declaration ) ĊĊĠ Ġrender Super Types ( type ) ĊĠ Ġrender Where Clause ( type . declaration . type Parameter Descriptors ) ĊĊĠ Ġrender (" Ġ") ĊĠ Ġrender In Cur ly Br ackets Ġ{ Ġrender Type Body ( type ) Ġ} Ċ } Ċ Ċ fun ĠRenderer . render Type Declaration ( declaration : ĠType Declaration ) Ġ{ ĊĠ Ġrender Identifier ( declaration . simple Binary Name ) ĊĠ Ġif Ġ( declaration . type Parameter Descriptors . isNotEmpty ()) Ġ{ ĊĠĠĠ Ġrender Type Parameters ( declaration . type Parameter Descriptors ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠRenderer . render Super Types ( type : ĠType ) Ġ{ ĊĠ Ġval Ġsuper Types Ġ= ĊĠĠĠ Ġtype . super Types Stream . filter Ġ{ Ġ! is Java Lang Object ( it ) Ġ}. collect ( Collectors . toList ()) ĊĠ Ġif Ġ( super Types . isNotEmpty ()) Ġ{ ĊĠĠĠ Ġval Ġhas Construct ors Ġ= Ġtype . construct ors . isNotEmpty () ĊĠĠĠ Ġrender (": Ġ") ĊĠĠĠ Ġrender Comma Separ ated ( super Types ) Ġ{ Ġsuper Type Ġ-> ĊĠĠĠĠĠ Ġrender TypeDescriptor ( super Type . to Non Nullable ()) ĊĠĠĠĠĠ Ġif Ġ( super Type . is Class Ġ&& Ġ! has Construct ors ) Ġrender (" () ") ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠRenderer . render Type Body ( type : ĠType ) Ġ{ ĊĠ Ġ// ĠTODO ( b / 3 9 9 4 5 5 9 0 6 ): ĠRemove Ġshort Ġterm Ġhack Ġto Ġpull Ġstatic Ġmethods Ġinto Ġcompanion Ġobject . ĊĠ Ġ// ĠTODO ( b / 3 9 9 4 5 5 9 0 6 ): ĠRender Ġenum Ġvalues . ĊĠ Ġval Ġ( static Members , Ġinstance Members ) Ġ= Ġtype . members . partition Ġ{ Ġit . is Static Ġ} ĊĊĠ Ġval Ġrender Instance Members Ġ= Ġinstance Members . isNotEmpty () ĊĠ Ġif Ġ( render Instance Members ) Ġ{ ĊĠĠĠ Ġrender NewLine () ĊĠĠĠ Ġrender Separ ated With Empty Line ( instance Members ) Ġ{ Ġrender Member ( it , Ġtype . kind ) Ġ} ĊĠ Ġ} ĊĊĠ Ġif Ġ( static Members . isNotEmpty ()) Ġ{ ĊĠĠĠ Ġrender NewLine () ĊĠĠĠ Ġif Ġ( render Instance Members ) Ġrender NewLine () Ġ// ĠEmpty Ġline Ġafter Ġlast Ġinstance Ġmember . ĊĠĠĠ Ġrender (" comp anion Ġobject Ġ") ĊĠĠĠ Ġrender In Cur ly Br ackets Ġ{ ĊĠĠĠĠĠ Ġrender NewLine () ĊĠĠĠĠĠ Ġrender Separ ated With Empty Line ( static Members ) Ġ{ Ġrender Member ( it , Ġtype . kind ) Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ