/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠEP AM ĠSystems , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 . ep am . inject . view model . processor Ċ Ċ import Ġcom . google . testing . compile . Compilation Subject Ċ import Ġcom . google . testing . compile . Compiler Ċ import Ġcom . google . testing . compile . Java File Objects Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ Ċ class ĠFactory Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprocessor : ĠAss isted ViewModel Processor ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġprocessor Ġ= ĠAss isted ViewModel Processor () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Class Ġ= ĠJava File Objects ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. for Source String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" test . ViewModel Class ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ; ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġcom . ep am . inject . view model . Ass isted ViewModel ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġandroidx . lifecycle . ViewModel ; ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠViewModel Class Ġextends ĠViewModel Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Ass isted ViewModel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠViewModel Class () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` factory Ġgeneration `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Factory Ġ= ĠJava File Objects . for Source String ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" com . ep am . inject . view model . Generated ViewModel Factory ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġcom . ep am . inject . view model ; ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġandroidx . lifecycle . ViewModel ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġjava . lang . Class ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġjava . lang . IllegalArgumentException ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġjava . lang . Override ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġjava . util . Map ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġjavax . inject . Provider ; ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠGenerated Ġby Ġdagger - 2 - vm - inject ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ 1 7 - May - 2 0 1 9 Ġ 1 3 : 3 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġfinal Ġclass ĠGenerated ViewModel Factory Ġextends ĠAss isted ViewModel Factory Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfinal ĠMap < Class <? Ġextends ĠViewModel >, ĠProvider < ViewModel >> ĠviewModel Map ; ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠGenerated ViewModel Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMap < Class <? Ġextends ĠViewModel >, ĠProvider < ViewModel >> ĠviewModel Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . viewModel Map Ġ= ĠviewModel Map ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Override ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġ< T Ġextends ĠViewModel > ĠT Ġcreate ( Class < T > Ġmodel Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal ĠProvider < ViewModel > Ġvm Provider Ġ= ĠviewModel Map . get ( model Class ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( vm Provider Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġnew ĠIllegalArgumentException ( model Class . getSimpleName () Ġ+ Ġ" Ġisn 't Ġsupported Ġby Ġthe ĠAss isted ViewModel Factory ."); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal ĠViewModel ĠviewModel Ġ= Ġvm Provider . get (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( model Class . isAssignableFrom ( viewModel . getClass ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( T ) ĠviewModel ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġnew ĠIllegalArgumentException ( model Class . getSimpleName () Ġ+ Ġ" Ġexpected Ġto Ġbe Ġsubtype Ġof ĠViewModel Ġclass ."); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= ĠCompiler . javac (). with Processors ( processor ). compile ( viewModel Class ) ĊĊĠĠĠĠĠĠĠ ĠCompilation Subject . assertThat ( compilation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. succeeded () ĊĠĠĠĠĠĠĠ ĠCompilation Subject . assertThat ( compilation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. generated SourceFile (" com . ep am . inject . view model . Generated ViewModel Factory ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Source Equivalent To ( expected Factory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` factory Ġmodule Ġgeneration `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Factory Ġ= ĠJava File Objects . for Source String ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" com . ep am . inject . view model . Generated ViewModel Factory Module ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġcom . ep am . inject . view model ; ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġandroidx . lifecycle . ViewModel ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġdagger . Module ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġdagger . Provides ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġjava . lang . Class ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġjava . util . Map ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġjavax . inject . Provider ; ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Module ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠGenerated ViewModel Factory Module Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Provides ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic ĠAss isted ViewModel Factory Ġprovide _ Generated ViewModel Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMap < Class <? Ġextends ĠViewModel >, ĠProvider < ViewModel >> ĠviewModel Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew ĠGenerated ViewModel Factory ( viewModel Map ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcompilation Ġ= ĠCompiler . javac (). with Processors ( processor ). compile ( viewModel Class ) ĊĊĠĠĠĠĠĠĠ ĠCompilation Subject . assertThat ( compilation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. succeeded () ĊĠĠĠĠĠĠĠ ĠCompilation Subject . assertThat ( compilation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. generated SourceFile (" com . ep am . inject . view model . Generated ViewModel Factory Module ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Source Equivalent To ( expected Factory ) ĊĠĠĠ Ġ} Ċ }