package Ġcom . air bnb . par is . processor . models Ċ Ċ import Ġcom . air bnb . par is . annotations .* Ċ import Ġcom . air bnb . par is . processor .* Ċ import Ġcom . air bnb . par is . processor . framework .* Ċ import Ġcom . air bnb . par is . processor . framework . errors .* Ċ import Ġcom . squareup . jav ap o et .* Ċ import Ġjavax . lang . model . element .* Ċ import Ġjavax . lang . model . type .* Ċ Ċ internal Ġclass ĠBase Style able Info Extractor Ġ{ ĊĊĠĠĠ Ġfun Ġfrom Environment (): ĠList < Base Style able Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbase Style ables Info Ġ= Ġmutable ListOf < Base Style able Info >() ĊĠĠĠĠĠĠĠ Ġelements . get Package Element ( PAR IS _ MODULES _ PACKAGE _ NAME )?. let Ġ{ Ġpackage Element Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Element . enc losed Elements ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . getAnnotation ( Generated Style able Module :: class . java ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġstyle able Module Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Style ables Info . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle able Module . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull < Generated Style able Class , ĠType Element > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtype Element : ĠType Element ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠMir rored Type Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Element Ġ= Ġe . type Mirror . as Type Element () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Element ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠBase Style able Info Extractor (). from Element ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbase Style ables Info ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Processor Exception :: class ) ĊĠĠĠ Ġfun Ġfrom Element ( element : ĠType Element ): ĠBase Style able Info Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġelement PackageName Ġ= Ġelement . packageName ĊĠĠĠĠĠĠĠ Ġval Ġelement Name Ġ= Ġelement . simple Name . toString () ĊĠĠĠĠĠĠĠ Ġval Ġelement Type Ġ= Ġelement . as Type () ĊĊĠĠĠĠĠĠĠ Ġval Ġview ElementType : ĠType Mirror ĊĠĠĠĠĠĠĠ Ġif Ġ( is Subtype ( elementType , Ġer asure ( PROXY _ CLASS _ NAME . to Type Mirror ()))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġparameter ized Ġtype , Ġwhich Ġshould Ġbe Ġthe Ġview Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ElementType Ġ= Ġ( element . super class Ġas ĠDecl ared Type ). type Arguments [ 1 ] ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ElementType Ġ= Ġelement Type ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġview Element Ġ= Ġview ElementType . as Type Element () ĊĠĠĠĠĠĠĠ Ġval Ġview Element PackageName Ġ= Ġview Element . packageName ĊĠĠĠĠĠĠĠ Ġval Ġview ElementName Ġ= Ġview Element . simple Name . toString () ĊĊĠĠĠĠĠĠĠ Ġval Ġstyle able Ġ= Ġelement . getAnnotation ( Style able :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġstyle able ResourceName Ġ= Ġstyle able . value ĊĊĠĠĠĠĠĠĠ Ġreturn ĠBase Style able Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement PackageName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Element PackageName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ElementName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ElementType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle able ResourceName ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġinternal Ġclass ĠBase Style able Info ( ĊĠĠĠĠĠĠĠ Ġval Ġelement PackageName : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġelement Name : ĠString , ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠIf Ġthe Ġstyle able Ġclass Ġis Ġnot Ġa Ġproxy , Ġwill Ġbe Ġequal Ġto Ġ[ view ElementType ]. ĠOtherwise , ĊĠĠĠĠĠĠĠĠ Ġ* Ġwill Ġrefer Ġto Ġthe Ġproxy Ġclass ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġelement Type : ĠType Mirror , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġview Element PackageName : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġview ElementName : ĠString , ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠIf Ġthe Ġstyle able Ġclass Ġis Ġnot Ġa Ġproxy , Ġwill Ġbe Ġequal Ġto Ġ[ elementType ]. ĠRef ers Ġto Ġthe Ġview ĊĠĠĠĠĠĠĠĠ Ġ* Ġclass ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġview ElementType : ĠType Mirror , ĊĠĠĠĠĠĠĠ Ġval Ġstyle able ResourceName : ĠString Ċ ) Ġ{ ĊĊĠĠĠ Ġconstructor ( base Style able Info : ĠBase Style able Info ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Style able Info . element PackageName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Style able Info . element Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Style able Info . elementType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Style able Info . view Element PackageName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Style able Info . view ElementName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Style able Info . view ElementType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Style able Info . style able ResourceName ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġstyle App lier ClassName (): ĠClass Name Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClass Name . get ( view Element PackageName , ĠString . format ( STYLE _ APP LI ER _ SIMPLE _ CLASS _ NAME _ FORMAT , Ġview ElementName )) Ċ } ĊĊ