package Ġcom . rick n out . r ug by rank er . work Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . work . List enable Worker Ċ import Ġandroidx . work . Worker Factory Ċ import Ġandroidx . work . Worker Parameters Ċ import Ġcom . rick n out . r ug by rank er . di . Worker Sub component Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Provider Ċ Ċ class ĠR ug by Rank er Worker Factory Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġworker Sub component : ĠWorker Sub component . Builder Ċ ) Ġ: ĠWorker Factory () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Worker ( app Context : ĠContext , Ġworker ClassName : ĠString , Ġworker Parameters : ĠWorker Parameters ): ĠList enable Worker ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġworker Sub component ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. worker Parameters ( worker Parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Worker ( worker ClassName , Ġworkers ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Worker ( worker ClassName : ĠString , Ġworkers : ĠMap < Class < out ĠList enable Worker >, ĠProvider < List enable Worker >> ): ĠList enable Worker ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġworker Class Ġ= ĠClass . forName ( worker ClassName ). as Subclass ( List enable Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprovider Ġ= Ġworkers [ worker Class ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( provider Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġworkers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( worker Class . isAssignableFrom ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( provider Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Missing Ġbinding Ġfor Ġ$ worker ClassName ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġprovider . get () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ