package Ġcom . air bnb . e po xy Ċ Ċ import Ġcom . air bnb . e po xy . ClassNames . E PO XY _ DATA _ BINDING _ HOLDER Ċ import Ġcom . air bnb . e po xy . ClassNames . E PO XY _ DATA _ BINDING _ MODEL Ċ import Ġcom . air bnb . e po xy . Utils . getElement ByName Ċ import Ġcom . squareup . jav ap o et . ClassName Ċ import Ġjavax . lang . model . element . Type Element Ċ import Ġjavax . lang . model . util . Elements Ċ import Ġjavax . lang . model . util . Types Ċ Ċ internal Ġclass ĠData Binding Model Info ( ĊĠĠĠ Ġprivate Ġval Ġtype Utils : ĠTypes , ĊĠĠĠ Ġprivate Ġval Ġelement Utils : ĠElements , ĊĠĠĠ Ġval Ġlayout Resource : ĠResource Value , ĊĠĠĠ Ġval ĠmoduleName : ĠString , ĊĠĠĠ Ġprivate Ġval Ġlayout Prefix : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġenable DoNot Hash : ĠBoolean Ċ ) Ġ: ĠGenerated Model Info () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdata Binding ClassName : ĠClass Name ĊĊĠĠĠ Ġprivate Ġval Ġdata Binding Class Element : ĠType Element ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Element ByName ( data Binding ClassName , Ġelement Utils , Ġtype Utils ) ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġdata Binding ClassName Ġ= ĠgetData Binding ClassName For Resource ( layout Resource , ĠmoduleName ) ĊĊĠĠĠĠĠĠĠ ĠsuperClass Element Ġ= ĠUtils . getElement ByName ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE PO XY _ DATA _ BINDING _ MODEL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Utils , Ġtype Utils ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠType Element ĊĠĠĠĠĠĠĠ Ġsuper ClassName Ġ= ĠE PO XY _ DATA _ BINDING _ MODEL ĊĠĠĠĠĠĠĠ Ġgenerated ClassName Ġ= Ġbuild Generated ModelName () ĊĠĠĠĠĠĠĠ Ġparame tri zed ClassName Ġ= Ġgenerated ClassName ĊĠĠĠĠĠĠĠ Ġbound Object TypeName Ġ= ĠE PO XY _ DATA _ BINDING _ HOLDER ĊĠĠĠĠĠĠĠ Ġshould Generate Model Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġcollect Methods Return ing ClassType ( super Class Element , Ġtype Utils ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLook Ġup Ġthe ĠData Binding Ġclass Ġgenerated Ġfor Ġthis Ġmodel 's Ġlayout Ġfile Ġand Ġparse Ġthe Ġattributes ĊĠĠĠĠ Ġ* Ġfor Ġit . ĊĠĠĠĠ Ġ* Ġ@ return ĠTrue Ġif Ġthe ĠData Binding Ġclass Ġexists , Ġfalse Ġotherwise . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġparse Data Binding Class (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġdatab ind ing Ġclass Ġwon 't Ġexist Ġuntil Ġthe Ġsecond Ġround Ġof Ġannotation Ġprocessing Ġsince ĊĠĠĠĠĠĠĠ Ġ// Ġit Ġis Ġgenerated Ġin Ġthe Ġfirst Ġround . ĊĠĠĠĠĠĠĠ Ġval Ġdata Binding Class Element Ġ= Ġthis . data Binding Class Element Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġval ĠhashCode Validator Ġ= ĠHash Code Validator ( type Utils , Ġelement Utils ) ĊĊĠĠĠĠĠĠĠ Ġdata Binding Class Element . executable Elements () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĠUtils . is Setter Method ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Binding Attribute Info ( this , Ġit , ĠhashCode Validator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . fieldName Ġ! in ĠFIELD _ NAME _ BLACK LIST Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Attributes ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetData Binding ClassName For Resource ( ĊĠĠĠĠĠĠĠ Ġlayout Resource : ĠResource Value , ĊĠĠĠĠĠĠĠ ĠmoduleName : ĠString ĊĠĠĠ Ġ): ĠClass Name Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodel Name Ġ= Ġlayout Resource . resourceName !!. to Upper Camel Case (). plus ( BINDING _ SUFFIX ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠClass Name . get ("$ moduleName . databinding ", Ġmodel Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Generated ModelName (): ĠClass Name Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodel Name Ġ= Ġlayout Resource . resourceName !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Prefix ( layout Prefix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Upper Camel Case () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( BINDING _ SUFFIX ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( Generated Model Info . GENERATED _ MODEL _ SUFFIX ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠClass Name . get ( moduleName , Ġmodel Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠB IND ING _ SUFFIX Ġ= Ġ" Binding " ĊĊĠĠĠĠĠĠĠ Ġval ĠFIELD _ NAME _ BLACK LIST Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStarting Ġwith ĠAndroid Ġplugin Ġ 3 . 1 . 0 Ġnested ĠData Binding Ġclasses Ġhave Ġa ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ" set Lifecycle Owner " Ġmethod ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" lifecycle Owner " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ