/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠM iko ÅĤ aj ĠLes zc zy ÅĦ ski Ġ& ĠApp mat t us ĠLimited Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . orbit m vi . orbit . swift . feature Ċ Ċ import Ġcom . s ams k iv ert . must ache . Must ache Ċ import Ġcom . s ams k iv ert . must ache . Template Ċ import Ġjava . io . File Ċ import Ġkotlinx . metadata . Flag Ċ import Ġkotlinx . metadata . Km Class Ċ import Ġkotlinx . metadata . Km Classifier Ċ import Ġkotlinx . metadata . Km Type Ċ Ċ class ĠObservable Object Processor Ġ: ĠProcessor Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Class ( processor Context : ĠProcessor Context , Ġclazz : ĠK m Class ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcontainer Host Type Ġ= Ġclazz . sup ert ypes . first OrNull Ġ{ Ġit . is Container Host Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( container Host Type Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframework Name : ĠString Ġ= Ġprocessor Context . framework . base Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Simple Name Ġ= Ġclazz . name . substring After Last ('/') ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontainer Host Types Ġ= Ġcontainer Host Type . arguments . map NotNull Ġ{ Ġ( it . type ?. classifier Ġas ? ĠK m Classifier . Class )?. name Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( has State , Ġhas Side Effect ) Ġ= Ġcontainer Host Types . map Ġ{ Ġit Ġ!= Ġ" kotlin / Nothing " Ġ&& Ġit Ġ!= Ġ" kotlin / Unit " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( state Name , Ġside Effect Name ) Ġ= Ġcontainer Host Types . map Ġ{ Ġit . substring After Last ('/') Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunctions Ġ= Ġclazz . functions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĠFlag . IS _ PUBLIC ( it . flags ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . name Ġ!= Ġ" on Cle ared " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġfunction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġfunction . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" parameters " Ġto Ġfunction . value Parameters . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġ( it . type ?. classifier Ġas ? ĠK m Classifier . Class )?. name ?. substring After Last ('/') !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġit . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" framework Name " Ġto Ġframework Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" className " Ġto Ġclass Simple Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" has State " Ġto Ġhas State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" has Side Effect " Ġto Ġhas Side Effect , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" state Type " Ġto Ġstate Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" side Effect Type " Ġto Ġside Effect Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" functions " Ġto Ġfunctions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Data Ġ= Ġtemplate . execute ( data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( processor Context . output Dir , Ġ"${ class Simple Name } Observable Object . swift "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate New File () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( output Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠK m Type . is Container Host : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( classifier Ġas ? ĠK m Classifier . Class )?. name Ġ== Ġ" org / orbit m vi / orbit / Container Host " ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtemplate : ĠTemplate Ġ= ĠMust ache . compiler () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compile ( Observable Object Processor :: class . java . class Loader . getResource (" Observable Object . swift . must ache ") !!. read Text ()) ĊĠĠĠ Ġ} Ċ } Ċ