/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . android . build . gradle . internal . tasks . databinding Ċ Ċ import Ġandroid . databinding . tool . Data Binding Builder Ċ import Ġandroid . databinding . tool . Feature Package Info Ċ import Ġcom . android . build . gradle . internal . component . A pk Creation Config Ċ import Ġcom . android . build . gradle . internal . component . Dynamic Feature Creation Config Ċ import Ġcom . android . build . gradle . internal . profile . Profile Aware Work Action Ċ import Ġcom . android . build . gradle . internal . publishing . Android Artifacts Ċ import Ġcom . android . build . gradle . internal . scope . Internal Artifact Type Ċ import Ġcom . android . build . gradle . internal . tasks . Non Incremental Task Ċ import Ġcom . android . build . gradle . internal . tasks . factory . Variant Task Creation Action Ċ import Ġcom . android . utils . FileUtils Ċ import Ġorg . gradle . api . file . Directory Property Ċ import Ġorg . gradle . api . file . File Collection Ċ import Ġorg . gradle . api . provider . Property Ċ import Ġorg . gradle . api . provider . SetProperty Ċ import Ġorg . gradle . api . tasks . Input Ċ import Ġorg . gradle . api . tasks . Input Files Ċ import Ġorg . gradle . api . tasks . Output Directory Ċ import Ġorg . gradle . api . tasks . Path Sensitive Ċ import Ġorg . gradle . api . tasks . Path Sensitivity Ċ import Ġorg . gradle . api . tasks . Task Provider Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* ĠThis Ġtask Ġcollect s Ġnecessary Ġinformation Ġfor Ġthe Ġdata Ġbinding Ġannotation Ġprocessor Ġto Ġgenerate Ċ Ġ* Ġthe Ġcorrect Ġcode . Ċ Ġ* Ġ< p > Ċ Ġ* ĠIt Ġhas Ġ 2 Ġmain Ġfunctionality : Ċ Ġ* Ġa ) Ġcopy Ġthe Ġpackage Ġid Ġresource Ġoffset Ġfor Ġthe Ġfeature Ġso Ġthat Ġdata Ġbinding Ġcan Ġproperly Ġoffset Ċ Ġ* ĠBR Ġclass Ġids . Ċ Ġ* Ċ Ġ* Ġb ) Ġcopy Ġthe ĠBR - bin Ġfiles Ġfrom Ġdependencies ĠFOR ĠWH ICH Ġa ĠBR Ġfile Ġneeds Ġto Ġbe Ġgenerated . Ċ Ġ* ĠThese Ġare Ġbasically Ġdependencies Ġwhich Ġneed Ġto Ġbe Ġpackaged Ġby Ġthis Ġfeature . Ġ( e . g . Ġif Ġa Ġlibrary Ċ Ġ* Ġdependency Ġis Ġalready Ġa Ġdependency Ġof Ġanother Ġfeature , Ġits ĠBR Ġclass Ġwill Ġalready Ġhave Ġbeen Ċ Ġ* Ġgenerated ) Ċ Ġ*/ Ċ abstract Ġclass ĠData Binding Export Feature Info Task Ġ: ĠNon Incremental Task () Ġ{ ĊĊĠĠĠ Ġ@ get : Output Directory Ġabstract Ġval Ġout Folder : ĠDirectory Property ĊĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġabstract Ġval Ġres Offset : ĠProperty < Int > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn Ġa Ġfeature , Ġwe Ġonly Ġneed Ġto Ġgenerate Ġcode Ġfor Ġits ĠRuntime Ġdependencies Ġas Ġcompile ĊĠĠĠĠ Ġ* Ġdependencies Ġare Ġalready Ġavailable Ġvia Ġother Ġdependencies Ġ( base Ġfeature Ġor Ġanother Ġfeature ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Input Files ĊĠĠĠ Ġ@ get : Path Sensitive ( Path Sensitivity . REL ATIVE ) ĊĠĠĠ Ġlateinit Ġvar Ġdirect Dependencies : ĠFile Collection ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġoverride Ġfun Ġdo Task Action () Ġ{ ĊĠĠĠĠĠĠĠ Ġworker Executor . no Isolation (). submit ( Export Feature Info Runnable :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . initialize From Android Variant Task ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . out Folder . set ( out Folder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . res Offset . set ( res Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . direct Dependencies . set ( direct Dependencies . as File Tree . files ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠCreation Action ( ĊĠĠĠĠĠĠĠ Ġcomponent Properties : ĠA pk Creation Config ĊĠĠĠ Ġ) Ġ: ĠVariant Task Creation Action < Data Binding Export Feature Info Task , ĠA pk Creation Config >( ĊĠĠĠĠĠĠĠ Ġcomponent Properties ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġname : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġcompute Task Name (" data Binding Export Feature Info ") ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠClass < Data Binding Export Feature Info Task > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠData Binding Export Feature Info Task :: class . java ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Provider : ĠTask Provider < Data Binding Export Feature Info Task > ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . handle Provider ( task Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreation Config . artifacts . setInitial Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Provider , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Binding Export Feature Info Task :: out Folder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). on ( Internal Artifact Type . FEATURE _ DATA _ BINDING _ FEATURE _ INFO ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconfigure ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask : ĠData Binding Export Feature Info Task ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . configure ( task ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . direct Dependencies Ġ= Ġcreation Config . variant Dependencies . get Artifact File Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Artifacts . Cons umed Config Type . RUNTIME _ CLAS SPATH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Artifacts . Artifact Scope . ALL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Artifacts . Artifact Type . DATA _ BINDING _ AR TI FACT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( creation Config Ġis ĠDynamic Feature Creation Config ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unexpected Ġtype : Ġ${ creation Config . java Class . name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . res Offset . set ( creation Config . res Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . res Offset . dis allow Changes () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ abstract Ġclass ĠExport Feature Info Params : ĠProfile Aware Work Action . Parameters () Ġ{ ĊĠĠĠ Ġabstract Ġval Ġout Folder : ĠDirectory Property ĊĠĠĠ Ġabstract Ġval Ġres Offset : ĠProperty < Int > ĊĠĠĠ Ġabstract Ġval Ġdirect Dependencies : ĠSet Property < File > Ċ } Ċ Ċ abstract Ġclass ĠExport Feature Info Runnable : ĠProfile Aware Work Action < Export Feature Info Params >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Folder Ġ= Ġparameters . out Folder . get (). as File ĊĠĠĠĠĠĠĠ ĠFileUtils . clean Output Dir ( output Folder ) ĊĠĠĠĠĠĠĠ Ġoutput Folder . mkdir s () ĊĠĠĠĠĠĠĠ Ġparameters . direct Dependencies . get (). filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name . endsWith ( Data Binding Builder . BR _ FILE _ EXT ) ĊĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . copy File ( it , ĠFile ( output Folder , Ġit . name )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġsave Ġthe Ġpackage Ġid Ġoffset ĊĠĠĠĠĠĠĠ ĠFeature Package Info ( packageId Ġ= Ġparameters . res Offset . get ()). serialize ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( output Folder , ĠData Binding Builder . FEATURE _ BR _ OFFSET _ FILE _ NAME ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }