/* Ċ Ġ* Ġ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 . generator . swift Ċ Ċ import Ġcom . here . glue co di um . common . L ime Type Refs Visitor Ċ import Ġcom . here . glue co di um . generator . common . Imports Collector Ċ import Ġcom . here . glue co di um . generator . common . Imports Resolver Ċ import Ġcom . here . glue co di um . model . lime . L ime GenericType Ċ import Ġcom . here . glue co di um . model . lime . L ime List Ċ import Ġcom . here . glue co di um . model . lime . L ime Map Ċ import Ġcom . here . glue co di um . model . lime . L ime Named Element Ċ import Ġcom . here . glue co di um . model . lime . L ime Set Ċ import Ġcom . here . glue co di um . model . lime . L ime Type Ċ import Ġcom . here . glue co di um . model . lime . L ime Type Helper Ċ import Ġcom . here . glue co di um . model . lime . L ime Type Ref Ċ Ċ internal Ġclass ĠSwift Imports Collector ( private Ġval Ġimports Resolver : ĠImports Resolver < String >) Ġ: ĠImports Collector < String > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtypes Collector Ġ= ĠRe ferred Types Collector () ĊĊĠĠĠ Ġoverride Ġfun Ġcollect Imports ( lime Element : ĠL ime Named Element ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġall Types Ġ= ĠL ime Type Helper . getAll Types ( lime Element ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ( all Types Ġ+ Ġtypes Collector . getAll Refer red Types ( all Types )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġimports Resolver . resolve Element Imports ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠRe ferred Types Collector Ġ: ĠL ime Type Refs Visitor < List < L ime Type >>() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Type Ref ( parentElement : ĠL ime Named Element , Ġlime Type Ref : ĠL ime Type Ref ?): ĠList < L ime Type > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġlime Type Ġ= Ġlime Type Ref ?. type ?. actual Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! is ĠL ime GenericType Ġ-> ĠlistOf ( lime Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠL ime List Ġ-> ĠlistOf ( lime Type ) Ġ+ Ġvisit Type Ref ( parentElement , Ġlime Type . elementType ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠL ime Set Ġ-> ĠlistOf ( lime Type ) Ġ+ Ġvisit Type Ref ( parentElement , Ġlime Type . elementType ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠL ime Map Ġ-> ĠlistOf ( lime Type ) Ġ+ Ġvisit Type Ref ( parentElement , Ġlime Type . key Type ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Type Ref ( parentElement , Ġlime Type . valueType ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetAll Refer red Types ( types : ĠList < L ime Type >) Ġ= Ġtraverse Types ( types ). flatten () ĊĠĠĠ Ġ} Ċ } Ċ