package Ġcom . la id pack . s our cer er . generator . index Ċ Ċ import Ġcom . github . jav ap ar ser . ast . Node Ċ import Ġcom . github . jav ap ar ser . ast . body . Annotation Declaration Ċ import Ġcom . github . jav ap ar ser . ast . body . Class Or Interface Declaration Ċ import Ġcom . github . jav ap ar ser . ast . body . Field Declaration Ċ import Ġcom . github . jav ap ar ser . ast . body . Variable Decl arator Ċ import Ġcom . github . jav ap ar ser . ast . expr .* Ċ import Ġcom . github . jav ap ar ser . ast . type . Primitive Type Ċ import Ġcom . la id pack . s our cer er . generator . first Ancestor OfType Ċ import Ġcom . la id pack . s our cer er . generator . first Desc endant OfType Ċ Ċ object ĠInt Def Annotation Extractor Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġinteger MinValue Var Ġ= ĠVariable Decl arator ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrimitive Type . int Type (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" integer Min ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInteger Literal Expr ("${ Int . MIN _ VALUE }") ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġinteger MaxValue Var Ġ= ĠVariable Decl arator ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrimitive Type . int Type (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" integer Min ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInteger Literal Expr ("${ Int . MAX _ VALUE }") ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġextract Int Def Annotations ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint Defined Annotations : ĠList < Annotation Expr >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Declarations : ĠMap < String , ĠField Declaration > ĊĠĠĠ Ġ): ĠList < Xd Int Def Annotation > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġint Def Annotations Ġ= Ġmutable ListOf < Xd Int Def Annotation >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( annotation Expression Ġin Ġint Defined Annotations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint Def Annotations . add ( extract Int Defined Annotation ( annotation Expression , Ġfield Declarations )) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġint Def Annotations ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract Int Defined Annotation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint Defined Annotation : ĠAnnotation Expr , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Declarations : ĠMap < String , ĠField Declaration > ĊĠĠĠ Ġ): ĠX d Int Def Annotation Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarray Initializer Expr Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint Defined Annotation . first Desc endant OfType ( Array Initializer Expr :: class . java ) Ġas ĠArray Initializer Expr ĊĠĠĠĠĠĠĠ Ġval Ġvariables Ġ= Ġarray Initializer Expr . values . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġis ĠName Expr Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġit . name AsString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġfield Declarations [ name ] Ġas ĠField Declaration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . variables . first Ġ{ Ġit . name AsString Ġ== Ġname Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġis ĠField Access Expr Ġ&& Ġis Integer Min Or MaxValue ( it ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . name AsString Ġ== Ġ" MIN _ VALUE ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteger MinValue Var ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġinteger MaxValue Var ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġis ĠField Access Expr Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariable Ġ= Ġfind Variable ( it ) Ġ?: Ġthrow ĠIllegalStateException (" Cannot Ġfind Ġfield Ġ'$ it ' Ġin Ġ@ Int Def Ġannotation Ġ$ int Defined Annotation ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Cannot Ġconvert Ġ'$ it ' Ġto Ġa Ġvariable ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġx d Int Def Annotation Ġ= ĠX d Int Def Annotation . new Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġint Defined Annotation . name AsString ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( variable Ġin Ġvariables ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx d Int Def Annotation . values . add ( Xd Int Def Annotation Value . new Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġvariable . name AsString . toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . value Ġ= ĠInt Value Extractor . resolve Int Value From Node ( variable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġx d Int Def Annotation ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Variable ( field Access Expr : ĠField Access Expr ): ĠVariable Decl arator ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsimple Name Ġ= Ġfield Access Expr . scope . as Name Expr (). name AsString ĊĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= Ġfield Access Expr . name . asString () ĊĠĠĠĠĠĠĠ Ġval Ġfound Classes Ġ= ĠDecl ared Type Registry . findBy Simple Name ( simple Name ) ĊĠĠĠĠĠĠĠ Ġif Ġ( found Classes . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( found Class Ġin Ġfound Classes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Declaration Ġ= Ġfound Class . getType Declaration () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtype Declaration . first Desc endant OfType ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVariable Decl arator :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġv Ġ-> Ġv . name AsString Ġ== ĠfieldName Ġ} Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġit Ġis Ġdefined Ġwith Ġan Ġannotation Ġdecl ar at ino ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġexample : Ġ@ interface ĠG utter Ġ{ Ġint ĠNONE Ġ= Ġ 0 ; Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Node Ġ= Ġfield Access Expr . find Root Node () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotation Declaration Ġ= Ġroot Node . first Desc endant OfType ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnnotation Declaration :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġn Ġ-> Ġn . name AsString Ġ== Ġsimple Name } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" Amb iguous Ġfield Ġaccess Ġexpression Ġ'$ field Access Expr '. ĠNo Ġindexed Ġtypes Ġfound Ġwith Ġthat Ġname ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġannotation Declaration . first Desc endant OfType ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVariable Decl arator :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġv Ġ-> Ġv . name AsString Ġ== ĠfieldName Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Integer Min Or MaxValue ( field Access Expr : ĠField Access Expr ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfield Access Expr . scope . is Name Expr ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġfield Access Expr . scope . as Name Expr (). name AsString Ġ== Ġ" Integer " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ( field Access Expr . name AsString Ġ== Ġ" MIN _ VALUE " Ġ|| Ġfield Access Expr . name AsString Ġ== Ġ" MAX _ VALUE ") ĊĠĠĠ Ġ} Ċ }