package Ġdev . f anie . state ful compiler Ċ Ċ import Ġjavax . lang . model . element . Executable Element Ċ Ċ @ Suppress (" Default Locale ") Ċ class ĠListener Builder ( ĊĠĠĠ Ġstate ful Package : ĠString , ĊĠĠĠ Ġprivate Ġval Ġstate ful Class : ĠString , ĊĠĠĠ Ġprivate Ġval Ġstate ful Get ters : ĠList < Executable Element >, ĊĠĠĠ Ġprivate Ġval Ġnon C asc ading : ĠBoolean , ĊĠĠĠ Ġprivate Ġval Ġno Diff ing : ĠBoolean Ċ ) Ġ: ĠClass Builder Ġ{ ĊĠĠĠ Ġprivate Ġval Ġstate ful Name Ġ= Ġstate ful Class . replace ("$ state ful Package .", Ġ""). capitalize () ĊĊĠĠĠ Ġoverride Ġval Ġclass Package Ġ= Ġ"$ state ful Package . state ful .${ state ful Name . toLowerCase () }" ĊĠĠĠ Ġoverride Ġval ĠclassName Ġ= Ġ" State ful ${ state ful Name } Listener " ĊĠĠĠ Ġoverride Ġval Ġclass Source ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( non C asc ading ) Ġnon C asc ading Source () Ġelse Ġc asc ading Source () ĊĊĠĠĠ Ġprivate Ġfun Ġnon C asc ading Source () Ġ= ĊĠĠĠĠĠĠĠ Ġ""" Ġ| package Ġ$ class Package ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| $ class Imports ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠContains Ġcallbacks Ġto Ġbe Ġinvoked Ġon Ġupdates Ġof Ġeach Ġindividual Ġpublic Ġproperty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* Ġof Ġan Ġinstance Ġof Ġthe Ġ[$ state ful Name ] Ġtype . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ Generated (" dev . f anie . state ful compiler . State ful Compiler ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| interface Ġ$ className Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ$ functions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĊĠĠĠ Ġprivate Ġfun Ġc asc ading Source () Ġ= ĊĠĠĠĠĠĠĠ Ġ""" Ġ| package Ġ$ class Package ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| $ class Imports ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠContains Ġcallbacks Ġto Ġbe Ġinvoked Ġon Ġupdates Ġof Ġeach Ġindividual Ġpublic Ġproperty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* Ġof Ġan Ġinstance Ġof Ġthe Ġ[$ state ful Name ] Ġtype . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ Generated (" dev . f anie . state ful compiler . State ful Compiler ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| interface Ġ$ className Ġ: Ġ$ sub Interface Names ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| $ sub Interfaces ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĊĠĠĠ Ġprivate Ġval Ġclass Imports Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimports Ġ= Ġmutable ListOf < String >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" javax . annotation . Generated ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( state ful Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Get ters . forEach Ġ{ Ġadd All ( it . type . imports ) Ġ} ĊĠĠĠĠĠĠĠ Ġ}. toSet (). sorted () ĊĊĠĠĠĠĠĠĠ Ġimports . forEach Indexed Ġ{ Ġindex , Ġimport Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" import Ġ$ import ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġimports . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfunctions ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Get ters . forEach Indexed Ġ{ Ġindex , Ġgetter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġgetter . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġgetter . type . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Space Ġ= Ġif Ġ( index Ġ> Ġ 0 ) Ġ" ĠĠĠ Ġ" Ġelse Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( initial Space ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! no Diff ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( newValue ( name , Ġtype )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( both Values ( name , Ġtype )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( newState ful ( name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( both State ful s ( name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( single Value ( name , Ġtype )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġstate ful Get ters . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠExec utable Element . interface Name Ġget () Ġ= Ġ" State ful $ state ful Name ${ this . name . capitalize ()} Listener " ĊĊĠĠĠ Ġprivate Ġval Ġsub Interface Names ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Get ters . forEach Indexed Ġ{ Ġindex , Ġgetter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n ĠĠĠ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( getter . interface Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġstate ful Get ters . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsub Interfaces ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate ful Get ters . forEach Indexed Ġ{ Ġindex , Ġgetter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġgetter . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġgetter . type . value ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| /** ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ* ĠContains Ġcallbacks Ġto Ġbe Ġinvoked Ġon Ġupdates Ġof Ġthe Ġ[$ state ful Name .$ name ] Ġproperty . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| @ Generated (" dev . f anie . state ful compiler . State ful Compiler ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| interface Ġ${ getter . interface Name } Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠĠĠ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! no Diff ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( newValue ( name , Ġtype )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( both Values ( name , Ġtype )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( newState ful ( name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( both State ful s ( name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( single Value ( name , Ġtype )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ('\ n ') ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (' }') ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġstate ful Get ters . last Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\ n \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠnewValue ( name : ĠString , Ġtype : ĠString ) Ġ= Ġ""" /** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ* ĠInv oked Ġon Ġupdates Ġof Ġthe Ġ[$ state ful Name .$ name ] Ġproperty . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ* Ġ@ param Ġnew ${ name . capitalize ()} ĠThe Ġnew Ġ$ name Ġto Ġbe Ġrendered . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfun Ġon ${ name . capitalize ()} Updated ( new ${ name . capitalize ()} : Ġ$ type ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĊĠĠĠ Ġprivate Ġfun Ġsingle Value ( name : ĠString , Ġtype : ĠString ) Ġ= Ġ""" /** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ* ĠInv oked Ġon Ġupdates Ġof Ġthe Ġ[$ state ful Name .$ name ] Ġproperty . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ* Ġ@ param Ġ$ name ĠThe Ġ$ name Ġto Ġbe Ġrendered . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfun Ġon ${ name . capitalize ()} ($ name : Ġ$ type ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĊĠĠĠ Ġprivate Ġfun Ġboth Values ( name : ĠString , Ġtype : ĠString ) Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ* ĠInv oked Ġon Ġupdates Ġof Ġthe Ġ[$ state ful Name .$ name ] Ġproperty . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ* Ġ@ param Ġcurrent ${ name . capitalize ()} ĠThe Ġcurrently Ġrendered Ġ$ name , Ġif Ġany . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ* Ġ@ param Ġnew ${ name . capitalize ()} ĠThe Ġnew Ġ$ name Ġto Ġbe Ġrendered . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġfun Ġon ${ name . capitalize ()} Updated ( current ${ name . capitalize ()} : Ġ$ type ?, Ġnew ${ name . capitalize ()} : Ġ$ type ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin (). replace (" ?? ", Ġ"? ") ĊĊĠĠĠ Ġprivate Ġfun ĠnewState ful ( name : ĠString ) Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ* ĠInv oked Ġon Ġupdates Ġof Ġthe Ġ[$ state ful Name .$ name ] Ġproperty . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ* Ġ@ param Ġnew $ state ful Name ĠThe Ġnew Ġ${ state ful Name . de capitalize ()} Ġto Ġbe Ġrendered . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġfun Ġon ${ name . capitalize ()} Updated ( new $ state ful Name : Ġ$ state ful Name ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () ĊĊĠĠĠ Ġprivate Ġfun Ġboth State ful s ( name : ĠString ) Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ* ĠInv oked Ġon Ġupdates Ġof Ġthe Ġ[$ state ful Name .$ name ] Ġproperty . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ* Ġ@ param Ġcurrent $ state ful Name ĠThe Ġcurrently Ġrendered Ġ${ state ful Name . de capitalize ()}, Ġif Ġany . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ* Ġ@ param Ġnew $ state ful Name ĠThe Ġnew Ġ${ state ful Name . de capitalize ()} Ġto Ġbe Ġrendered . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠ Ġfun Ġon ${ name . capitalize ()} Updated ( current $ state ful Name : Ġ$ state ful Name ?, Ġnew $ state ful Name : Ġ$ state ful Name ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () Ċ } Ċ