/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 Ġ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 . ml kit . codegen . code injector . inner class Ċ Ċ import Ġcom . android . build . gradle . internal . tasks . ml kit . codegen . ClassNames Ċ import Ġcom . android . build . gradle . internal . tasks . ml kit . codegen . code injector . Code Injector Ċ import Ġcom . android . build . gradle . internal . tasks . ml kit . codegen . getGroup Class ParameterType Ċ import Ġcom . android . tools . ml kit . Ml Names Ċ import Ġcom . android . tools . ml kit . Model Info Ċ import Ġcom . android . tools . ml kit . Tensor Info Ċ import Ġcom . android . utils . us Locale Capital ize Ċ import Ġcom . squareup . jav ap o et . Field Spec Ċ import Ġcom . squareup . jav ap o et . Method Spec Ċ import Ġcom . squareup . jav ap o et . Type Spec Ċ import Ġjavax . lang . model . element . Modifier Ċ Ċ /** ĠInject or Ġto Ġinject Ġinner Ġclass Ġto Ġrepresent Ġtensor Ġgroup . ĠIt Ġgenerates Ġclass Ġwith Ġfollowing Ġformat : Ċ Ġ* Ġ< pre > Ċ Ġ* ĠĠĠ Ġpublic Ġclass ĠTensor GroupName Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠ Ġprivate ĠType Ġtensor 1 ; Ċ Ġ* ĠĠĠĠĠĠĠ Ġprivate ĠTensor Group ( Type Ġtensor 1 ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tensor 1 Ġ= Ġtensor 1 ; Ċ Ġ* ĠĠĠĠĠĠĠ Ġ} Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠ Ġpublic ĠType Ġget Tensor 1 As Type () Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtensor 1 ; Ċ Ġ* ĠĠĠĠĠĠĠ Ġ} Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠ Ġ// ĠMore Ġgetters Ġfor Ġother Ġtensors Ġif Ġexist . Ċ Ġ* ĠĠĠĠĠĠĠ Ġ// Ġ... Ċ Ġ* ĠĠĠ Ġ} Ċ Ġ* Ġ</ pre > Ċ Ġ*/ Ċ class ĠGroup Class Injector Ġ: ĠCode Injector < Type Spec . Builder , ĠModel Info > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġinject ( class Builder : ĠType Spec . Builder , Ġmodel Info : ĠModel Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( tensor Group Info Ġin Ġmodel Info . output Tensor Groups ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠType Spec . class Builder ( tensor Group Info . identifier Name . us Locale Capital ize ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add Modifiers ( Modifier . PUBLIC ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtensor Infos : ĠList < Tensor Info > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Info . outputs . filter Ġ{ Ġtensor Group Info . tensor Names . contains ( it . name ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġconstructor . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstructor Builder Ġ= ĠMethod Spec . constructor Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( Modifier . PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( tensor Info Ġin Ġtensor Infos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Builder . add Parameter ( getGroup Class ParameterType ( tensor Info ), Ġtensor Info . identifier Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Builder . add Statement (" this .\ $ L Ġ= Ġ\$ L ", Ġtensor Info . identifier Name , Ġtensor Info . identifier Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add Method ( constructor Builder . build ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġdata Ġfields . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( tensor Info Ġin Ġtensor Infos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Spec Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠField Spec . builder ( getGroup Class ParameterType ( tensor Info ), Ġtensor Info . identifier Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( Modifier . PRIVATE , ĠModifier . FINAL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . addField ( field Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġgetter Ġmethods ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( tensor Info Ġin Ġtensor Infos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Spec Builder Ġ= ĠMethod Spec . method Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM l Names . format Getter Name ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtensor Info . identifier Name , Ġget TypeName ( tensor Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Modifiers ( Modifier . PUBLIC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. returns ( getGroup Class ParameterType ( tensor Info )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Annotation ( ClassNames . NON _ NULL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Statement (" return Ġ\$ L ", Ġtensor Info . identifier Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add Method ( method Spec Builder . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass Builder . add Type ( builder . build ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget TypeName ( tensor Info : ĠTensor Info ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtensor Info . fileType Ġ== ĠTensor Info . FileType . T ENSOR _ VALUE _ LABEL S Ġ-> Ġ" String " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtensor Info . contentType Ġ== ĠTensor Info . ContentType . BOUND ING _ BOX Ġ-> Ġ" Rect F " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtensor Info . dataType Ġ== ĠTensor Info . DataType . FLOAT 3 2 Ġ-> Ġ" Float " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" Int " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }