package Ġtemplates Ċ Ċ import Ġtemplates . Family .* Ċ import Ġjava . io . String Reader Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . HashMap Ċ import Ġjava . util . HashSet Ċ import Ġjava . util . String Tokenizer Ċ Ċ enum Ġclass ĠFamily Ġ{ ĊĠĠĠ ĠSe quences ĊĠĠĠ ĠIter ables ĊĠĠĠ ĠCollections ĊĠĠĠ ĠLists ĊĠĠĠ ĠMaps ĊĠĠĠ ĠArrays Of Objects ĊĠĠĠ ĠArrays Of Primitives ĊĠĠĠ ĠStrings ĊĠĠĠ ĠRange s Of Primitives ĊĠĠĠ ĠProgress ions Of Primitives Ċ } Ċ Ċ enum Ġclass ĠPrimitive Type ( val Ġname : ĠString ) Ġ{ ĊĠĠĠ ĠBoolean Ġ: ĠPrimitive Type (" Boolean ") ĊĠĠĠ ĠByte Ġ: ĠPrimitive Type (" Byte ") ĊĠĠĠ ĠChar Ġ: ĠPrimitive Type (" Char ") ĊĠĠĠ ĠShort Ġ: ĠPrimitive Type (" Short ") ĊĠĠĠ ĠInt Ġ: ĠPrimitive Type (" Int ") ĊĠĠĠ ĠLong Ġ: ĠPrimitive Type (" Long ") ĊĠĠĠ ĠFloat Ġ: ĠPrimitive Type (" Float ") ĊĠĠĠ ĠDouble Ġ: ĠPrimitive Type (" Double ") Ċ } ĊĊ Ċ class ĠGeneric Function ( val Ġsignature : ĠString , Ġval Ġkeyword : ĠString Ġ= Ġ" fun ") Ġ: ĠComparable < Generic Function > Ġ{ ĊĠĠĠ Ġval Ġdefault F amilies Ġ= Ġarray ( Iter ables , ĠSe quences , ĠArrays Of Objects , ĠArrays Of Primitives , ĠStrings ) ĊĊĠĠĠ Ġvar Ġto Nullable T : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġdefault Inline Ġ= Ġfalse ĊĠĠĠ Ġvar Ġreceiver A ster isk Ġ= Ġfalse ĊĠĠĠ Ġval Ġinline F amilies Ġ= ĠHashMap < Family , ĠBoolean >() ĊĊĠĠĠ Ġval Ġbuild F amilies Ġ= ĠHashSet ( default F amilies . toList ()) ĊĠĠĠ Ġprivate Ġval Ġbuild Primitives Ġ= ĠHashSet ( Primitive Type . values (). toList ()) ĊĊĠĠĠ Ġvar Ġdeprec ate : ĠString Ġ= Ġ"" ĊĠĠĠ Ġval Ġdeprec ates Ġ= Ġhash Map Of < Family , ĠString >() ĊĊĠĠĠ Ġvar Ġdoc : ĠString Ġ= Ġ"" ĊĠĠĠ Ġval Ġdocs Ġ= ĠHashMap < Family , ĠString >() ĊĊĠĠĠ Ġvar Ġdefault Body : ĠString Ġ= Ġ"" ĊĠĠĠ Ġval Ġbodies Ġ= ĠHashMap < Family , ĠString >() ĊĠĠĠ Ġval Ġcustom Primitive B odies Ġ= ĠHashMap < Pair < Family , ĠPrimitive Type >, ĠString >() ĊĊĠĠĠ Ġvar Ġdefault ReturnType Ġ= Ġ"" ĊĠĠĠ Ġval Ġreturn Types Ġ= ĠHashMap < Family , ĠString >() ĊĊĠĠĠ Ġval Ġtype Params Ġ= ĠArrayList < String >() ĊĊĠĠĠ Ġfun Ġbody ( var arg Ġfam ilies : ĠFamily , Ġb : Ġ() Ġ-> ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( f amilies . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Body Ġ= Ġb () ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( f Ġin Ġfam ilies ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinclude ( f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbodies [ f ] Ġ= Ġb () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbody For Types ( family : ĠFamily , Ġvar arg Ġprimitive Types : ĠPrimitive Type , Ġb : Ġ() Ġ-> ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinclude ( family ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( f Ġin Ġprimitive Types ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Primitive B odies . put ( family Ġto Ġf , Ġb ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdoc ( var arg Ġfam ilies : ĠFamily , Ġb : Ġ() Ġ-> ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( f amilies . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdoc Ġ= Ġb () ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( f Ġin Ġfam ilies ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocs [ f ] Ġ= Ġb () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdeprec ate ( var arg Ġfam ilies : ĠFamily , Ġb : Ġ() Ġ-> ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( f amilies . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeprec ate Ġ= Ġb () ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( f Ġin Ġfam ilies ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeprec ates [ f ] Ġ= Ġb () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreturns ( var arg Ġfam ilies : ĠFamily , Ġb : Ġ() Ġ-> ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( f amilies . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault ReturnType Ġ= Ġb () ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( f Ġin Ġfam ilies ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Types [ f ] Ġ= Ġb () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreturns ( r : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdefault ReturnType Ġ= Ġr ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtype Param ( t : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtype Params . add ( t ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreceiver A ster isk ( v : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreceiver A ster isk Ġ= Ġv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinline ( value : ĠBoolean , Ġvar arg Ġfam ilies : ĠFamily ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( f amilies . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Inline Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( f Ġin Ġfam ilies ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline F amilies . put ( f , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexclude ( var arg Ġfam ilies : ĠFamily ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild F amilies . removeAll ( f amilies . toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġonly ( var arg Ġfam ilies : ĠFamily ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild F amilies . clear () ĊĠĠĠĠĠĠĠ Ġbuild F amilies . addAll ( f amilies . toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinclude ( var arg Ġfam ilies : ĠFamily ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild F amilies . addAll ( f amilies . toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexclude ( var arg Ġp : ĠPrimitive Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild Primitives . removeAll ( p . toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinclude ( var arg Ġp : ĠPrimitive Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild Primitives . addAll ( p . toList ()) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġbuild ( var arg Ġfam ilies : ĠFamily Ġ= ĠFamily . values ()): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġfor Ġ( family Ġin Ġfam ilies . sortBy Ġ{ Ġit . name () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( build F amilies . contains ( family )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild ( builder , Ġfamily ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild ( builder : ĠStringBuilder , Ġf : ĠFamily ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( f Ġ== ĠArrays Of Primitives Ġ|| Ġf Ġ== ĠRange s Of Primitives Ġ|| Ġf Ġ== ĠProgress ions Of Primitives ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( primitive Ġin Ġbuild Primitives . sortBy Ġ{ Ġit . name () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild ( builder , Ġf , Ġprimitive ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild ( builder , Ġf , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild ( builder : ĠStringBuilder , Ġf : ĠFamily , Ġprimitive : ĠPrimitive Type ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( f Ġ== ĠSe quences ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= ĠStringBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Build ( this , Ġf , Ġprimitive ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ln () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( de prec ates [ f ] Ġ== Ġnull Ġ&& Ġdeprec ate . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ln (" deprecated (\" Migrate Ġto Ġusing ĠSequence < T > Ġand Ġrespective Ġfunctions \") ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Text Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" Sequence ", Ġ" Stream ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" sequence ", Ġ" stream ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" Multi Stream ", Ġ" Mult istream ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( stream Text ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Build ( builder , Ġf , Ġprimitive ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo Build ( builder : ĠStringBuilder , Ġf : ĠFamily , Ġprimitive : ĠPrimitive Type ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠreturnType Ġ= Ġreturn Types [ f ] Ġ?: Ġdefault ReturnType ĊĠĠĠĠĠĠĠ Ġif Ġ( returnType . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" No Ġreturn Ġtype Ġspecified Ġfor Ġ$ signature ") ĊĊĠĠĠĠĠĠĠ Ġval Ġis A ster isk Or T Ġ= Ġif Ġ( receiver A ster isk ) Ġ"*" Ġelse Ġ" T " ĊĠĠĠĠĠĠĠ Ġval Ġreceiver Ġ= Ġwhen Ġ( f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIter ables Ġ-> Ġ" Iterable <$ is A ster isk Or T >" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCollections Ġ-> Ġ" Collection <$ is A ster isk Or T >" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLists Ġ-> Ġ" List <$ is A ster isk Or T >" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaps Ġ-> Ġ" Map < K , ĠV >" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSe quences Ġ-> Ġ" Sequence <$ is A ster isk Or T >" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArrays Of Objects Ġ-> Ġ" Array <$ is A ster isk Or T >" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStrings Ġ-> Ġ" String " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArrays Of Primitives Ġ-> Ġprimitive ?. let Ġ{ Ġit . name () Ġ+ Ġ" Array " Ġ} Ġ?: Ġthrow ĠIllegalArgumentException (" Primitive Ġarray Ġshould Ġspecify Ġprimitive Ġtype ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRange s Of Primitives Ġ-> Ġprimitive ?. let Ġ{ Ġit . name () Ġ+ Ġ" Range " Ġ} Ġ?: Ġthrow ĠIllegalArgumentException (" Primitive Ġrange Ġshould Ġspecify Ġprimitive Ġtype ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProgress ions Of Primitives Ġ-> Ġprimitive ?. let Ġ{ Ġit . name () Ġ+ Ġ" Progress ion " Ġ} Ġ?: Ġthrow ĠIllegalArgumentException (" Primitive Ġprogress ion Ġshould Ġspecify Ġprimitive Ġtype ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Invalid Ġfamily ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġfun ĠString . render Type (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= ĠString Tokenizer ( this , Ġ" Ġ\ t \ n ,: () <> ? .", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanswer Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( t . hasMore Tokens ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġt . nextToken () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanswer . append ( when Ġ( token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELF " Ġ-> Ġif Ġ( receiver Ġ== Ġ" Array < T >") Ġ" Array < out ĠT >" Ġelse Ġreceiver ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" PR IMIT IVE " Ġ-> Ġprimitive ?. name () Ġ?: Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" SUM " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( primitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrimitive Type . Byte , ĠPrimitive Type . Short , ĠPrimitive Type . Char Ġ-> Ġ" Int " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġprimitive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ZERO " Ġ-> Ġwhen Ġ( primitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrimitive Type . Double Ġ-> Ġ" 0 . 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrimitive Type . Float Ġ-> Ġ" 0 . 0 f " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ONE " Ġ-> Ġwhen Ġ( primitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrimitive Type . Double Ġ-> Ġ" 1 . 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrimitive Type . Float Ġ-> Ġ" 1 . 0 f " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrimitive Type . Long Ġ-> Ġ" 1 . to Long ()" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- ONE " Ġ-> Ġwhen Ġ( primitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrimitive Type . Double Ġ-> Ġ"- 1 . 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrimitive Type . Float Ġ-> Ġ"- 1 . 0 f " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrimitive Type . Long Ġ-> Ġ"- 1 . to Long ()" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"- 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" T Collection " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStrings Ġ-> Ġ" Append able " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" Mutable Collection < in ĠT >". render Type () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" T " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStrings Ġ-> Ġ" Char " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaps Ġ-> Ġ" Map . Entry < K , ĠV >" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġprimitive ?. name () Ġ?: Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" T Progress ion " Ġ-> Ġprimitive !!. name Ġ+ Ġ" Progress ion " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġanswer . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġeffective Type Params (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtypes Ġ= ĠArrayList ( type Params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( primitive Ġ== Ġnull Ġ&& Ġf Ġ!= ĠStrings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimplicit Type Parameters Ġ= Ġreceiver . drop While Ġ{ Ġit Ġ!= Ġ'< ' Ġ}. drop ( 1 ). filter Not Ġ{ Ġit Ġ== Ġ' Ġ' Ġ}. take While Ġ{ Ġit Ġ!= Ġ' >' Ġ}. split (",") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( implicit Ġin Ġimplicit Type Parameters . reverse ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( implicit Ġ!= Ġ"*" Ġ&& Ġ! types . any Ġ{ Ġit . startsWith ( implicit ) Ġ|| Ġit . startsWith (" re ified Ġ" Ġ+ Ġimplicit ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtypes . add ( 0 , Ġimplicit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtypes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġprimitive Ġtype Ġarrays Ġshould Ġdrop Ġconstraints ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtype Params . filter Ġ{ Ġ! it . startsWith (" T ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmethod Doc Ġ= Ġdocs [ f ] Ġ?: Ġdoc ĊĠĠĠĠĠĠĠ Ġif Ġ( method Doc Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" /** \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString Reader ( method Doc ). forEach Line Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġit . trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! line . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" Ġ* Ġ"). append ( line ). append ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" Ġ*/ \ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdeprecated Ġ= Ġdeprec ates [ f ] Ġ?: Ġdeprec ate ĊĠĠĠĠĠĠĠ Ġif Ġ( deprecated Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" deprecated (\" $ deprecated \") \ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuilder . append (" public Ġ") ĊĠĠĠĠĠĠĠ Ġif Ġ( inline F amilies [ f ] Ġ?: Ġdefault Inline ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" inline Ġ") ĊĊĠĠĠĠĠĠĠ Ġbuilder . append ("$ keyword Ġ") ĊĊĠĠĠĠĠĠĠ Ġval Ġtypes Ġ= Ġeffective Type Params () ĊĠĠĠĠĠĠĠ Ġif Ġ(! types . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( types . join ( separator Ġ= Ġ", Ġ", Ġprefix Ġ= Ġ"< ", Ġpostfix Ġ= Ġ"> Ġ"). render Type ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġreceiver Type Ġ= Ġ( when Ġ( receiver ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Array < T >" Ġ-> Ġif Ġ( to Nullable T ) Ġ" Array < out ĠT ?>" Ġelse Ġ" Array < out ĠT >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġif Ġ( to Nullable T ) Ġreceiver . replace (" T >", Ġ" T ?> ") Ġelse Ġreceiver ĊĠĠĠĠĠĠĠ Ġ}). render Type () ĊĊĊĠĠĠĠĠĠĠ Ġbuilder . append ( receiver Type ) ĊĠĠĠĠĠĠĠ Ġbuilder . append (". ${ signature . render Type ()} : Ġ${ returnType . render Type () }") ĊĠĠĠĠĠĠĠ Ġif Ġ( keyword Ġ== Ġ" fun ") Ġbuilder . append (" Ġ{ ") ĊĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġ( custom Primitive B odies [ f Ġto Ġprimitive ] Ġ?: Ġbodies [ f ] Ġ?: Ġdefault Body ). trim ("\ n ") ĊĠĠĠĠĠĠĠ Ġval Ġindent : ĠInt Ġ= Ġbody . take While Ġ{ Ġit Ġ== Ġ' Ġ' Ġ}. length () ĊĊĠĠĠĠĠĠĠ Ġbuilder . append ('\ n ') ĊĠĠĠĠĠĠĠ ĠString Reader ( body ). forEach Line Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġindent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġit . drop While Ġ{ Ġcount -- Ġ> Ġ 0 Ġ&& Ġit Ġ== Ġ' Ġ' Ġ}. render Type () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" ĠĠĠ Ġ"). append ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( keyword Ġ== Ġ" fun ") Ġbuilder . append (" }\ n ") ĊĠĠĠĠĠĠĠ Ġbuilder . append ("\ n ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġcompare To ( other : ĠGeneric Function ): ĠInt Ġ= Ġthis . signature . compareTo ( other . signature ) Ċ } Ċ Ċ fun ĠString . trim Trailing Spaces (): ĠString Ġ{ ĊĠĠĠ Ġvar Ġanswer Ġ= Ġthis ; ĊĠĠĠ Ġwhile Ġ( answer . endsWith (' Ġ') Ġ|| Ġanswer . endsWith ('\ n ')) Ġanswer Ġ= Ġanswer . substring ( 0 , Ġanswer . length () Ġ- Ġ 1 ) ĊĠĠĠ Ġreturn Ġanswer Ċ } Ċ Ċ fun Ġf ( signature : ĠString , Ġinit : ĠGeneric Function . () Ġ-> ĠUnit ): ĠGeneric Function Ġ{ ĊĠĠĠ Ġval Ġgf Ġ= ĠGeneric Function ( signature ) ĊĠĠĠ Ġgf . init () ĊĠĠĠ Ġreturn Ġgf Ċ } Ċ Ċ fun Ġp val ( signature : ĠString , Ġinit : ĠGeneric Function . () Ġ-> ĠUnit ): ĠGeneric Function Ġ{ ĊĠĠĠ Ġval Ġgf Ġ= ĠGeneric Function ( signature , Ġ" val ") ĊĠĠĠ Ġgf . init () ĊĠĠĠ Ġreturn Ġgf Ċ } Ċ Ċ fun Ġp var ( signature : ĠString , Ġinit : ĠGeneric Function . () Ġ-> ĠUnit ): ĠGeneric Function Ġ{ ĊĠĠĠ Ġval Ġgf Ġ= ĠGeneric Function ( signature , Ġ" var ") ĊĠĠĠ Ġgf . init () ĊĠĠĠ Ġreturn Ġgf Ċ } Ċ