/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 6 - 2 0 2 1 ĠHERE ĠEurope ĠB . V . Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ* Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ* ĠLicense - Filename : ĠLICENSE Ċ Ġ*/ Ċ Ċ package Ġcom . here . glue co di um . validator Ċ Ċ import Ġcom . here . glue co di um . common . L ime Logger Ċ import Ġcom . here . glue co di um . model . lime . L ime Basic Type Ċ import Ġcom . here . glue co di um . model . lime . L ime Constant Ċ import Ġcom . here . glue co di um . model . lime . L ime Enumeration Ċ import Ġcom . here . glue co di um . model . lime . L ime Field Ċ import Ġcom . here . glue co di um . model . lime . L ime GenericType Ċ import Ġcom . here . glue co di um . model . lime . L ime Model Ċ import Ġcom . here . glue co di um . model . lime . L ime Struct Ċ import Ġcom . here . glue co di um . model . lime . L ime Typed Element Ċ import Ġcom . here . glue co di um . model . lime . L ime Value Ċ Ċ /** Ċ Ġ* ĠValid ates Ġvalues Ġassigned Ġto Ġconstants Ġand Ġfields Ġfor Ġcorrect ness . Ċ Ġ*/ Ċ internal Ġclass ĠL ime Values Validator ( private Ġval Ġlogger : ĠL ime Logger ) Ġ{ ĊĊĠĠĠ Ġfun Ġvalidate ( lime Model : ĠL ime Model ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġall Fields Ġ= Ġlime Model . reference Map . values . filter Is Instance < L ime Field >() ĊĠĠĠĠĠĠĠ Ġval Ġall Constants Ġ= Ġlime Model . reference Map . values . filter Is Instance < L ime Constant >() ĊĠĠĠĠĠĠĠ Ġval Ġvalidation Results Ġ= Ġall Fields . map Ġ{ Ġvalidate Field ( it ) Ġ} Ġ+ Ġall Constants . map Ġ{ Ġvalidate Value ( it , Ġit . value ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ! validation Results . contains ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate Field ( lime Field : ĠL ime Field ) Ġ= ĊĠĠĠĠĠĠĠ Ġlime Field . defaultValue ?. let Ġ{ Ġvalidate Value ( lime Field , Ġit ) Ġ} Ġ?: Ġtrue ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate Value ( lime Element : ĠL ime Typed Element , Ġlime Value : ĠL ime Value ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactual Type Ġ= Ġlime Element . type Ref . type . actual Type ĊĠĠĠĠĠĠĠ Ġwhen Ġ( lime Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠL ime Value . Literal Ġ-> Ġif Ġ( actual Type Ġ! is ĠL ime Basic Type Ġ|| Ġ! actual Type . type Id . is Literal Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( lime Element , Ġ" literal Ġvalues Ġcan Ġonly Ġbe Ġassigned Ġto Ġnumeric Ġtypes , Ġ` Boolean `, Ġor Ġ` String ` ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠL ime Value . Enumerator Ġ-> Ġif Ġ( actual Type Ġ! is ĠL ime Enumeration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( lime Element , Ġ" enum erator Ġvalues Ġcan Ġonly Ġbe Ġassigned Ġto Ġ` enum ` Ġtypes ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠL ime Value . Initializer List Ġ-> Ġif Ġ( actual Type Ġ! is ĠL ime GenericType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( lime Element , Ġ" initializer Ġlist Ġvalues Ġcan Ġonly Ġbe Ġassigned Ġto Ġcollection Ġtypes ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠL ime Value . KeyValuePair Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( lime Element , Ġ" key - value Ġpair Ġvalues Ġcan Ġonly Ġbe Ġused Ġinside Ġinitializer Ġlists ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠL ime Value . Null Ġ-> Ġif Ġ(! lime Element . type Ref . is Nullable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( lime Element , Ġ"` null ` Ġvalue Ġcan Ġonly Ġbe Ġassigned Ġto Ġa Ġnullable Ġtype ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠL ime Value . Special Ġ-> Ġif Ġ( actual Type Ġ! is ĠL ime Basic Type Ġ|| Ġ! actual Type . type Id . is Numeric Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( lime Element , Ġ" special Ġnumeric Ġvalues Ġcan Ġonly Ġbe Ġassigned Ġto Ġnumeric Ġtypes ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠL ime Value . Struct Initializer Ġ-> Ġif Ġ( actual Type Ġ! is ĠL ime Struct ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( lime Element , Ġ" struct Ġinitializer Ġvalues Ġcan Ġonly Ġbe Ġassigned Ġto Ġ` struct ` Ġtypes ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ