package Ġsoftware . amazon . smithy . crt . java Ċ Ċ import Ġcom . squareup . jav ap o et .* Ċ import Ġsoftware . amazon . smithy . build . Plugin Context Ċ import Ġsoftware . amazon . smithy . crt . codegen . Source Generator Ċ import Ġsoftware . amazon . smithy . crt . java . Types . Utils . to TypeName Ċ import Ġsoftware . amazon . smithy . model . Model Ċ import Ġsoftware . amazon . smithy . model . shapes . Shape Ċ import Ġsoftware . amazon . smithy . model . shapes . Shape Id Ċ import Ġsoftware . amazon . smithy . model . traits . Documentation Trait Ċ import Ġjava . nio . file . Path Ċ import Ġjava . util .* Ċ import Ġjava . util . function . Consumer Ċ import Ġjava . util . logging . Logger Ċ import Ġjava . util . stream . Collectors Ċ Ċ // ĠShape Generators Ġmap Ġfrom ĠSm ithy ĠShape Ġ-> ĠJava Ġsource Ġfile Ċ // ĠEach Ġshape Ġgenerator Ġcreates Ġ 1 Ġor Ġmore ĠJava ĠElements Ġinternally , Ġand Ċ // Ġturns Ġthem Ġinto ĠJava Ġcode Ġvia ĠJava Po et Ċ abstract Ġclass ĠShape Generator ( protected Ġval Ġplugin Context : ĠPlugin Context , Ġprotected Ġval ĠclassName : ĠClass Name ) Ġ: ĠSource Generator Ġ{ ĊĊĠĠĠ Ġprotected Ġval Ġlog : ĠLogger Ġ= ĠLogger . getLogger ( Shape Generator :: class . simple Name ) ĊĠĠĠ Ġprotected Ġval Ġmodel : ĠModel Ġ= Ġplugin Context . model ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠStandard Ġformat / setup Ġfor Ġemit ting Ġa Ġsource Ġfile Ġto ĠJava ĊĠĠĠĠĠĠĠ Ġfun Ġemit ( className : ĠClass Name , Ġbuilder : ĠType Spec . Builder ) Ġ: ĠJava File Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJava File . builder ( className . packageName (), Ġbuilder . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add File Comment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCopyright ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSPDX - License - Identifier : ĠApache - 2 . 0 . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. indent (" ĠĠĠ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġfields From Shape ( shape : ĠShape ) Ġ: ĠFields Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġshape . members (). stream (). map Ġ{ Ġmember Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfield Ġ= ĠField ( member . member Name , Ġto TypeName ( to Shape ( member . target ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( member . has Trait ( Documentation Trait :: class . java ObjectType )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield . add Documentation ( member . get Trait ( Documentation Trait :: class . java ObjectType ). get (). value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġfield ĊĠĠĠĠĠĠĠ Ġ}. collect ( Collectors . toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto Shape ( id : ĠShape Id ) Ġ: ĠShape Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmodel . get Shape ( id ). get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġgenerated Annotation ( generator : ĠClass < *> ): ĠAnnotation Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAnnotation ( Generated . CLASS _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. java Ġ{ Ġbuilder Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add Member (" value ", Ġ"${ '$ '} S ", ĠClass Name . best Guess ( generator . name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġaccept ( dir : ĠPath , Ġmanifest : ĠConsumer < Path >) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjava Source Ġ= Ġemit ( className , Ġgenerate ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest . accept ( java Source . writeTo Path ( dir )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex Ġ: ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . se vere ( ex . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġgenerate () Ġ: ĠType Spec . Builder Ċ }