/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠE gor ĠAnd ree v ici Ċ Ġ* Ċ Ġ* Ġ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 Ġme . e gor and . p izz af actory . annotations Ċ Ċ import Ġjavax . lang . model . element . Type Element Ċ import Ġjavax . lang . model . type . Declared Type Ċ import Ġjavax . lang . model . type . Mir rored Type Exception Ċ Ċ class ĠFactory Item Annotated Class ( internal Ġval Ġannotated Class Element : ĠType Element ) Ġ{ ĊĊĠ Ġinternal Ġval Ġid : ĠString ĊĠ Ġinternal Ġvar Ġqualified Group ClassName : ĠString ĊĠ Ġinternal Ġvar Ġsimple Factory GroupName : ĠString ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġval Ġme al Annotation Ġ= Ġannotated Class Element . getAnnotation ( Factory Item :: class . java ) ĊĠĠĠ Ġid Ġ= Ġme al Annotation . id ĊĊĠĠĠ Ġif Ġ( id . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠProcessing Exception ( annotated Class Element , Ġ" id Ġin Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠ Ġ"@ ${ Factory Item :: class . java . simple Name } Ġfor Ġclass Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠ Ġ"${ annotated Class Element . qualified Name } Ġshould Ġnot Ġbe Ġempty ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġklass Ġ= Ġme al Annotation . type . java ĊĠĠĠĠĠ Ġqualified Group ClassName Ġ= Ġklass . canonical Name ĊĠĠĠĠĠ Ġsimple Factory GroupName Ġ= Ġklass . simple Name ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠMir rored Type Exception ) Ġ{ ĊĠĠĠĠĠ Ġval Ġclass Type Mirror Ġ= Ġe . type Mirror Ġas ĠDecl ared Type ĊĠĠĠĠĠ Ġval Ġclass Type Element Ġ= Ġclass Type Mirror . as Element () Ġas ĠType Element ĊĠĠĠĠĠ Ġqualified Group ClassName Ġ= Ġclass Type Element . qualified Name . toString () ĊĠĠĠĠĠ Ġsimple Factory GroupName Ġ= Ġclass Type Element . simple Name . toString () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }