package Ġnet . ruby gr ape fruit . gen . files Ċ Ċ import Ġnet . ruby gr ape fruit . gen . extensions . capital ized Ċ import Ġnet . ruby gr ape fruit . gen . specs . Jvm ClassName Ċ import Ġkotlin . reflect . K Class Ċ Ċ sealed Ġclass ĠJ vm Type Ġ{ ĊĠĠĠ Ġabstract Ġval Ġtype Declaration : ĠString ĊĊĠĠĠ Ġabstract Ġval Ġas Var args : ĠJ vm Type ĊĊĠĠĠ Ġabstract Ġfun Ġnew Instance ( var arg Ġparams : ĠR Value ): ĠExpression ĊĊĠĠĠ Ġfun Ġnew Instance ( string Literal : ĠString ): ĠExpression Ġ= Ġnew Instance ( string Literal . expression ) ĊĊĠĠĠ Ġabstract Ġfun Ġvisit Types ( consumer : Ġ( Jvm ClassName ) Ġ-> ĠUnit ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvoid Type Ġ= ĠRaw Type ( Jvm ClassName (" void ")) ĊĠĠĠĠĠĠĠ Ġval Ġlong Type Ġ= ĠRaw Type ( Jvm ClassName (" long ")) ĊĠĠĠĠĠĠĠ Ġval Ġstring Type Ġ= Ġtype ( String :: class ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġtype ( name : ĠString ): ĠRaw Type Ġ= ĠRaw Type ( Jvm ClassName ( name )) ĊĠĠĠĠĠĠĠ Ġfun Ġtype ( name : ĠJ vm ClassName ): ĠRaw Type Ġ= ĠRaw Type ( name ) ĊĠĠĠĠĠĠĠ Ġfun Ġtype ( raw Type : ĠK Class < *> ): ĠRaw Type Ġ= ĠRaw Type ( java Type ( raw Type )) ĊĠĠĠĠĠĠĠ Ġfun Ġtype ( name : ĠString , Ġparam : ĠString ): ĠJ vm Type Ġ= ĠParameter ized Type ( Jvm ClassName ( name ), Ġtype ( param )) ĊĠĠĠĠĠĠĠ Ġfun Ġtype ( name : ĠString , Ġparam : ĠJ vm ClassName ): ĠJ vm Type Ġ= ĠParameter ized Type ( Jvm ClassName ( name ), Ġtype ( param )) ĊĠĠĠĠĠĠĠ Ġfun Ġtype ( name : ĠString , Ġparam : ĠJ vm Type ): ĠJ vm Type Ġ= ĠParameter ized Type ( Jvm ClassName ( name ), Ġparam ) ĊĠĠĠĠĠĠĠ Ġfun Ġtype ( raw Type : ĠK Class <* >, Ġparam : ĠJ vm ClassName ): ĠJ vm Type Ġ= ĠParameter ized Type ( java Type ( raw Type ), Ġtype ( param )) ĊĠĠĠĠĠĠĠ Ġfun Ġtype ( name : ĠString , Ġparam : ĠK Class < *> ): ĠJ vm Type Ġ= ĠParameter ized Type ( Jvm ClassName ( name ), Ġtype ( param )) ĊĠĠĠĠĠĠĠ Ġfun Ġtype ( raw Type : ĠK Class <* >, Ġparam : ĠK Class < *> ): ĠJ vm Type Ġ= ĠParameter ized Type ( java Type ( raw Type ), Ġtype ( param )) ĊĠĠĠĠĠĠĠ Ġfun Ġtype ( raw Type : ĠK Class <* >, Ġparam : ĠJ vm Type ): ĠJ vm Type Ġ= ĠParameter ized Type ( java Type ( raw Type ), Ġparam ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġjava Type ( type : ĠK Class < *> ): ĠJ vm ClassName Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠString :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJ vm ClassName ( String :: class . java . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠSet :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJ vm ClassName ( Set :: class . java . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠList :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJ vm ClassName ( List :: class . java . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( type Ġ== ĠLinked HashSet :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJ vm ClassName ( Linked HashSet :: class . java . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJ vm ClassName ( type . qualified Name !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠRaw Type ( ĊĠĠĠ Ġval Ġname : ĠJ vm ClassName Ċ ) Ġ: ĠJ vm Type () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġtype Declaration : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġname . simple Name ĊĊĠĠĠ Ġoverride Ġval Ġas Var args : ĠJ vm Type ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠVar args Type ( this ) ĊĊĠĠĠ Ġval Ġas Type Literal ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠExpression ("${ name . simple Name }. class ") ĊĊĠĠĠ Ġoverride Ġfun Ġnew Instance ( var arg Ġparams : ĠR Value ) Ġ= ĠExpression (" new Ġ${ name . simple Name } (${ params . join ToString (", Ġ") Ġ{ Ġit . literal Ġ}}) ") ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Types ( consumer : Ġ( Jvm ClassName ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconsumer ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfield ( name : ĠString ) Ġ= ĠExpression ("${ this . name . simple Name }. $ name ") ĊĊĠĠĠ Ġfun Ġstatic MethodCall ( name : ĠString ) Ġ= ĠExpression ("${ this . name . simple Name }. $ name () ") Ċ } Ċ Ċ class ĠParameter ized Type ( ĊĠĠĠ Ġval Ġraw Type : ĠJ vm ClassName , ĊĠĠĠ Ġval Ġparam : ĠJ vm Type Ċ ) Ġ: ĠJ vm Type () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġtype Declaration : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"${ raw Type . simple Name } < ${ param . type Declaration }> " ĊĊĠĠĠ Ġoverride Ġval Ġas Var args : ĠJ vm Type ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠVar args Type ( Raw Type ( raw Type )) ĊĊĠĠĠ Ġoverride Ġfun Ġnew Instance ( var arg Ġparams : ĠR Value ) Ġ= ĠExpression (" new Ġ${ raw Type . simple Name } <> (${ params . join ToString (", Ġ") Ġ{ Ġit . literal Ġ}}) ") ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Types ( consumer : Ġ( Jvm ClassName ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconsumer ( raw Type ) ĊĠĠĠĠĠĠĠ Ġparam . visit Types ( consumer ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠVar args Type ( ĊĠĠĠ Ġval Ġtype : ĠJ vm Type Ċ ) Ġ: ĠJ vm Type () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġtype Declaration : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"${ type . type Declaration } ..." ĊĊĠĠĠ Ġoverride Ġval Ġas Var args : ĠJ vm Type ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthrow ĠUnsupportedOperationException () ĊĊĠĠĠ Ġoverride Ġfun Ġnew Instance ( var arg Ġparams : ĠR Value ) Ġ= Ġthrow ĠUnsupportedOperationException () ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Types ( consumer : Ġ( Jvm ClassName ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtype . visit Types ( consumer ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ sealed Ġclass ĠR Value Ġ{ ĊĠĠĠ Ġabstract Ġval Ġliteral : ĠString ĊĊĠĠĠ Ġoperator Ġfun Ġplus ( other : ĠR Value ) Ġ= ĠExpression (" ($ literal Ġ+ Ġ${ other . literal }) ") ĊĊĠĠĠ Ġoperator Ġfun Ġminus ( other : ĠR Value ) Ġ= ĠExpression (" ($ literal Ġ- Ġ${ other . literal }) ") ĊĊĠĠĠ Ġoperator Ġfun Ġdiv ( other : ĠR Value ) Ġ= ĠExpression (" ($ literal Ġ/ Ġ${ other . literal }) ") Ċ } Ċ Ċ sealed Ġclass ĠInstance Ref ( ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġval Ġtype : ĠJ vm Type Ċ ) Ġ: ĠR Value () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġliteral Ġ= Ġname ĊĊĠĠĠ Ġfun Ġmethod Call ( name : ĠString , Ġvar arg Ġparams : ĠR Value ): ĠExpression Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠExpression ("${ this . name }. $ name (${ params . join ToString (", Ġ") Ġ{ Ġit . literal Ġ}}) ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġread Property ( name : ĠString ): ĠExpression Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠExpression ("${ this . name }. get ${ name . capital ized ()} () ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠLocal Variable ( ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġtype : ĠJ vm Type Ċ ) Ġ: ĠInstance Ref ( name , Ġtype ) Ċ Ċ class ĠInstance Variable ( ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġtype : ĠJ vm Type Ċ ) Ġ: ĠInstance Ref ( name , Ġtype ) Ċ Ċ class ĠExpression ( ĊĠĠĠ Ġoverride Ġval Ġliteral : ĠString Ċ ) Ġ: ĠR Value () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġstring ( string Literal : ĠString ): ĠExpression Ġ= ĠExpression ("\" $ string Literal \" ") ĊĠĠĠĠĠĠĠ Ġfun Ġlong Value ( value : ĠLong ): ĠExpression Ġ= ĠExpression ("${ value }") ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠString . expression : ĠExpression ĊĠĠĠ Ġget () Ġ= ĠExpression . string ( this ) Ċ Ċ val ĠLong . expression : ĠExpression ĊĠĠĠ Ġget () Ġ= ĠExpression . longValue ( this ) Ċ