/* Ċ Ġ* ĠCopyright ĠL WJ GL . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠLicense Ġterms : Ġhttps :// www . lwjgl . org / license Ċ Ġ*/ Ċ package Ġorg . lwjgl . generator Ċ Ċ import Ġjava . io .* Ċ import Ġkotlin . math .* Ċ import Ġkotlin . reflect .* Ċ Ċ // ĠExtension Ġproperties Ġfor Ġnumeric Ġliterals . Ċ inline Ġval ĠInt . b Ġget () Ġ= Ġthis . to Byte () Ċ inline Ġval ĠInt . s Ġget () Ġ= Ġthis . to Short () Ċ inline Ġval ĠLong . i Ġget () Ġ= Ġthis . toInt () Ċ Ċ open Ġclass ĠConstant Type < T Ġ: ĠAny >( ĊĠĠĠ Ġval Ġjava Type : ĠString , ĊĠĠĠ Ġval Ġprint : Ġ( T ) Ġ-> ĠString Ċ ) Ġ{ ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġtype : ĠK Class < T >, ĊĠĠĠĠĠĠĠ Ġprint : Ġ( T ) Ġ-> ĠString ĊĠĠĠ Ġ) Ġ: Ġthis ( type . java . simple Name , Ġprint ) Ċ } Ċ Ċ val ĠByte Constant Ġ= ĠConstant Type ( Byte :: class ) Ġ{ Ġvalue Ġ-> ĊĠĠĠ Ġval Ġi Ġ= Ġvalue . toInt () Ġand Ġ 0 xFF ĊĠĠĠ Ġ" 0 x % X ". format ( i ). let Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġ 0 x 8 0 ) Ġit Ġelse Ġ"( byte )$ it " ĊĠĠĠ Ġ} Ċ } Ċ val ĠChar Constant Ġ= ĠConstant Type ( Char :: class ) Ġ{ Ġ"' $ it '" Ġ} Ċ val ĠShort Constant Ġ= ĠConstant Type ( Short :: class ) Ġ{ Ġvalue Ġ-> ĊĠĠĠ Ġval Ġi Ġ= Ġvalue . toInt () Ġand Ġ 0 xFFFF ĊĠĠĠ Ġ" 0 x % X ". format ( i ). let Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġ 0 x 8 0 0 0 ) Ġit Ġelse Ġ"( short )$ it " ĊĠĠĠ Ġ} Ċ } Ċ val ĠInt Constant Ġ= ĠConstant Type ( Int :: class ) Ġ{ Ġ" 0 x % X ". format ( it ) Ġ} Ċ val ĠLong Constant Ġ= ĠConstant Type ( Long :: class ) Ġ{ Ġ" 0 x % XL ". format ( it ) Ġ} Ċ val ĠFloat Constant Ġ= ĠConstant Type ( Float :: class ) Ġ{ Ġ"% sf ". format ( it ) Ġ} Ċ val ĠDouble Constant Ġ= ĠConstant Type ( Double :: class ) Ġ{ Ġ"% sd ". format ( it ) Ġ} Ċ Ċ val ĠString Constant Ġ= ĠConstant Type ( String :: class ) Ġ{ Ġif Ġ( it . contains (" Ġ+ Ġ\"" )) Ġit Ġelse Ġ"\" $ it \"" Ġ} Ċ Ċ abstract Ġclass ĠEnum Value ( val Ġdocumentation : Ġ(() Ġ-> ĠString ?) Ġ= Ġ{ Ġnull Ġ}) Ċ Ċ open Ġclass ĠEnum Int Value ( ĊĠĠĠ Ġdocumentation : Ġ(() Ġ-> ĠString ?) Ġ= Ġ{ Ġnull Ġ}, ĊĠĠĠ Ġval Ġvalue : ĠInt ? Ġ= Ġnull Ċ ) Ġ: ĠEnum Value ( documentation ) Ċ class ĠEnum Int Value Expression ( ĊĠĠĠ Ġdocumentation : Ġ() Ġ-> ĠString ?, ĊĠĠĠ Ġval Ġexpression : ĠString Ċ ) Ġ: ĠEnum Int Value ( documentation , Ġnull ) Ċ val ĠEnum Constant Ġ= ĠConstant Type ( Enum Int Value :: class ) Ġ{ Ġ" 0 x % X ". format ( it ) Ġ} Ċ Ċ // ĠTODO : Ġthis Ġis Ġugly , Ġtry Ġnew ĠDSL ? Ċ open Ġclass ĠEnum Long Value ( ĊĠĠĠ Ġdocumentation : Ġ(() Ġ-> ĠString ?) Ġ= Ġ{ Ġnull Ġ}, ĊĠĠĠ Ġval Ġvalue : ĠLong ? Ġ= Ġnull Ċ ) Ġ: ĠEnum Value ( documentation ) Ċ class ĠEnum Long Value Expression ( ĊĠĠĠ Ġdocumentation : Ġ() Ġ-> ĠString ?, ĊĠĠĠ Ġval Ġexpression : ĠString Ċ ) Ġ: ĠEnum Long Value ( documentation , Ġnull ) Ċ val ĠEnum Constant Long Ġ= ĠConstant Type ( Enum Long Value :: class ) Ġ{ Ġ" 0 x % X ". format ( it ) Ġ} Ċ Ċ open Ġclass ĠConstant < out ĠT Ġ: ĠAny >( val Ġname : ĠString , Ġval Ġvalue : ĠT ?) Ċ internal Ġclass ĠConstant Expression < out ĠT Ġ: ĠAny >( ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġval Ġexpression : ĠString , ĊĠĠĠ Ġ// ĠUsed Ġfor ĠString Constants Ġonly , Ġfalse : Ġwrap Ġin Ġquotes , Ġtrue : Ġprint Ġas Ġis ĊĠĠĠ Ġval Ġun wrapped : ĠBoolean Ċ ) Ġ: ĠConstant < T >( name , Ġnull ) Ċ Ċ class ĠConstant Block < T Ġ: ĠAny >( ĊĠĠĠ Ġval Ġnative Class : ĠNative Class , ĊĠĠĠ Ġvar Ġaccess : ĠAccess , ĊĠĠĠ Ġprivate Ġval Ġconstant Type : ĠConstant Type < T >, ĊĠĠĠ Ġval Ġdocumentation : Ġ() Ġ-> ĠString , ĊĠĠĠ Ġval Ġsee : ĠArray < String > ?, ĊĠĠĠ Ġvar arg Ġval Ġconstants : ĠConstant < T > Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġno Prefix Ġ= Ġfalse ĊĊĠĠĠ Ġfun Ġno Prefix (): ĠConstant Block < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġno Prefix Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Constant Name ( name : ĠString ) Ġ= Ġif Ġ( no Prefix ) Ġname Ġelse Ġ"${ native Class . prefix Constant }$ name " ĊĊĠĠĠ Ġinternal Ġfun ĠgetClass Link ( name : ĠString ) Ġ= Ġif Ġ( no Prefix Ġ&& Ġnative Class . prefix Constant . isNotEmpty ()) ĊĠĠĠĠĠĠĠ Ġ"${ native Class . className } #$ name " ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġ"${ native Class . className } # ${ native Class . prefix Constant }$ name " ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Enum Int ( root Block : ĠArrayList < Constant < Number >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġvalue Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġformat Type Ġ= Ġ 1 Ġ// Ġ 0 : Ġhex , Ġ 1 : Ġdecimal ĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġconstants ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġis ĠConstant Expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Block . add ( c Ġas ĠConstant Expression < Int >) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( c . value Ġas ĠEnum Int Value ). let Ġ{ Ġev Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Block . add ( when Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġev Ġis ĠEnum Int Value Expression Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠInteger . parseInt ( ev . expression ) Ġ+ Ġ 1 Ġ// Ġdecimal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Type Ġ= Ġ 1 Ġ// Ġnext Ġvalues Ġwill Ġbe Ġdecimal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( e : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠInteger . parseInt ( ev . expression , Ġ 1 6 ) Ġ+ Ġ 1 Ġ// Ġhex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġignore ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Type Ġ= Ġ 0 Ġ// Ġnext Ġvalues Ġwill Ġbe Ġhex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstant Expression ( c . name , Ġev . expression , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġev . value Ġ!= Ġnull ĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġev . value Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Type Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstant ( c . name , Ġev . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( format Type Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstant Expression ( c . name , Ġ( value ++ ). toString (), Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstant ( c . name , Ġvalue ++) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Enum Long ( root Block : ĠArrayList < Constant < Number >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġvalue Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġvar Ġformat Type Ġ= Ġ 1 Ġ// Ġ 0 : Ġhex , Ġ 1 : Ġdecimal ĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġconstants ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġis ĠConstant Expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Block . add ( c Ġas ĠConstant Expression < Long >) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( c . value Ġas ĠEnum Long Value ). let Ġ{ Ġev Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Block . add ( when Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġev Ġis ĠEnum Long Value Expression Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġjava . lang . Long . parse Long ( ev . expression ) Ġ+ Ġ 1 L Ġ// Ġdecimal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Type Ġ= Ġ 1 Ġ// Ġnext Ġvalues Ġwill Ġbe Ġdecimal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( e : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġjava . lang . Long . parse Long ( ev . expression , Ġ 1 6 ) Ġ+ Ġ 1 L Ġ// Ġhex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġignore ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Type Ġ= Ġ 0 Ġ// Ġnext Ġvalues Ġwill Ġbe Ġhex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstant Expression ( c . name , Ġev . expression , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġev . value Ġ!= Ġnull ĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġev . value Ġ+ Ġ 1 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Type Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstant ( c . name , Ġev . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( format Type Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstant Expression ( c . name , Ġ( value ++ ). toString (), Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstant ( c . name , Ġvalue ++) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġgenerate ( writer : ĠPrintWriter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( constant Type Ġ=== ĠEnum Constant Ġ|| Ġconstant Type Ġ=== ĠEnum Constant Long ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIncrement / update Ġthe Ġcurrent Ġenum Ġvalue Ġwhile Ġiter ating Ġthe Ġenum Ġconstants . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConstants Ġwithout Ġdocumentation Ġare Ġadded Ġto Ġthe Ġroot Ġblock . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConstants Ġwith Ġdocumentation Ġgo Ġto Ġtheir Ġown Ġblock . ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Block Ġ= ĠArrayList < Constant < Number >>() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstant Type Render Ġ= Ġif Ġ( constant Type Ġ=== ĠEnum Constant ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Enum Int ( root Block ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt Constant ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Enum Long ( root Block ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLong Constant ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstant Block ( native Class , Ġaccess , Ġconstant Type Render , Ġdocumentation (). let Ġ{ Ġdoc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstants . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( it Ġis ĠConstant Expression ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . value Ġas ĠEnum Value ). documentation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). let Ġ{ Ġenum Doc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġ"# ${ get Constant Name ( it . name )}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enum Doc Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( doc . contains ( link )) Ġ|| Ġconstants . size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< li >{@ link Ġ$ link Ġ${ it . name }}</ li >" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< li >{@ link Ġ$ link Ġ${ it . name }} Ġ- Ġ$ enum Doc </ li >" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("\ n $ t $ t $ t ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġenum Doc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enum Doc . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ${ if Ġ( doc . isEmpty ()) Ġ"" Ġelse Ġ"$ t $ doc \ n \ n "} ĊĠĠĠĠĠĠĠ Ġ< h 5 > Enum Ġvalues :</ h 5 > ĊĠĠĠĠĠĠĠ Ġ< ul > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ$ enum Doc ĊĠĠĠĠĠĠĠ Ġ</ ul > ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġsee , Ġ* root Block . toArray ( empty Array ())). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . no Prefix Ġ= Ġno Prefix ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . generate ( writer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . generate Block () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPrintWriter . generate Block () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln () ĊĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= Ġdocumentation () ĊĠĠĠĠĠĠĠ Ġif Ġ( doc . isNotEmpty () Ġ|| Ġsee Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( doc . to Java Doc ( see Ġ= Ġsee )) ĊĊĠĠĠĠĠĠĠ Ġprint ("$ t ${ access . modifier } static Ġfinal Ġ${ constant Type . java Type }") ĊĊĠĠĠĠĠĠĠ Ġval Ġindent Ġ= Ġif Ġ( constants . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ t $ t " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠFind Ġmaximum Ġconstant Ġname Ġlength ĊĠĠĠĠĠĠĠ Ġval Ġalignment Ġ= Ġconstants . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name . length ĊĠĠĠĠĠĠĠ Ġ}. fold ( 0 ) Ġ{ Ġleft , Ġright Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax ( left , Ġright ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconstants . forEach With More Ġ{ Ġit , Ġmore Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( more ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (',') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Constant ( it , Ġindent , Ġalignment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln ("; ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPrintWriter . print Constant ( constant : ĠConstant < T >, Ġindent : ĠString , Ġalignment : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprint ("$ indent ${ get Constant Name ( constant . name )} ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġalignment Ġ- Ġconstant . name . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint (' Ġ') ĊĊĠĠĠĠĠĠĠ Ġprint (" Ġ= Ġ") ĊĠĠĠĠĠĠĠ Ġif Ġ( constant Ġis ĠConstant Expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( if Ġ( constant Type Ġ!== ĠString Constant Ġ|| Ġconstant . un wrapped ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstant . expression ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstant Type . print ( constant . expression ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( constant Type . print ( constant . value !! )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġjava Doc Links Ġget () Ġ= Ġjava Doc Links ( null ) ĊĠĠĠ Ġval Ġjava Doc Links Skip Count Ġget () Ġ= Ġjava Doc Links Ġ{ Ġ! it . name . endsWith ("_ COUNT ") Ġ} ĊĊĠĠĠ Ġfun Ġjava Doc Links ( predicate : Ġ(( Constant < T >) Ġ-> ĠBoolean )? ) Ġ= Ġconstants . as Sequence () ĊĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġconstants Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( predicate Ġ== Ġnull ) Ġconstants Ġelse Ġconstants . filter Ġ{ Ġpredicate ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠ Ġ. join ToString (" Ġ# ", Ġprefix Ġ= Ġ"# ") Ċ }