package Ġarrow . opt ics Ċ Ċ import Ġarrow . common . utils . Class Or Package Data Wrapper Ċ import Ġarrow . common . utils . fullName Ċ import Ġme . e ug eni om ar let ti . kotlin . metadata . escaped ClassName Ċ import Ġjavax . lang . model . element . Type Element Ċ Ċ public Ġdata Ġclass ĠAnnot ated Element ( val Ġtype : ĠType Element , Ġval Ġclass Data : ĠClass Or Package Data Wrapper . Class , Ġval Ġtargets : ĠList < Target >) Ġ{ ĊĠ Ġpublic Ġval Ġsource ClassName : ĠString Ġ= Ġclass Data . fullName . escaped ClassName ĊĠ Ġpublic Ġval Ġsource Name : ĠString Ġ= Ġtype . simple Name . toString (). de capitalize () ĊĠ Ġpublic Ġval ĠpackageName : ĠString Ġ= Ġclass Data .` package `. escaped ClassName ĊĊĠ Ġpublic Ġoperator Ġfun ĠSn ippet . plus ( snippet : ĠSn ippet ): ĠSn ippet Ġ= Ġcopy ( ĊĠĠĠ Ġimports Ġ= Ġimports Ġ+ Ġsnippet . imports , ĊĠĠĠ Ġcontent Ġ= Ġ"$ content \ n ${ snippet . content }" ĊĠ Ġ) Ċ } Ċ Ċ public Ġtype alias ĠI so Target Ġ= ĠTarget . Iso Ċ public Ġtype alias ĠPrism Target Ġ= ĠTarget . Prism Ċ public Ġtype alias ĠLens Target Ġ= ĠTarget . Lens Ċ public Ġtype alias ĠOptional Target Ġ= ĠTarget . Optional Ċ public Ġtype alias ĠSe aled Class Dsl Ġ= ĠTarget . Se aled Class Dsl Ċ public Ġtype alias ĠData Class Dsl Ġ= ĠTarget . Data Class Dsl Ċ Ċ public Ġsealed Ġclass ĠTarget Ġ{ ĊĠ Ġpublic Ġabstract Ġval Ġf oci : ĠList < Focus > ĊĊĠ Ġpublic Ġdata Ġclass ĠI so ( override Ġval Ġf oci : ĠList < Focus >) Ġ: ĠTarget () ĊĠ Ġpublic Ġdata Ġclass ĠPrism ( override Ġval Ġf oci : ĠList < Focus >) Ġ: ĠTarget () ĊĠ Ġpublic Ġdata Ġclass ĠLens ( override Ġval Ġf oci : ĠList < Focus >) Ġ: ĠTarget () ĊĠ Ġpublic Ġdata Ġclass ĠOptional ( override Ġval Ġf oci : ĠList < Focus >) Ġ: ĠTarget () ĊĠ Ġpublic Ġdata Ġclass ĠSe aled Class Dsl ( override Ġval Ġf oci : ĠList < Focus >) Ġ: ĠTarget () ĊĠ Ġpublic Ġdata Ġclass ĠData Class Dsl ( override Ġval Ġf oci : ĠList < Focus >) Ġ: ĠTarget () Ċ } Ċ Ċ public Ġtype alias ĠNon Null Focus Ġ= ĠFocus . NonNull Ċ public Ġtype alias ĠOption Focus Ġ= ĠFocus . Option Ċ public Ġtype alias ĠNullable Focus Ġ= ĠFocus . Nullable Ċ Ċ public Ġsealed Ġclass ĠFocus Ġ{ ĊĊĠ Ġpublic Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġpublic Ġoperator Ġfun Ġinvoke ( fullName : ĠString , Ġparam Name : ĠString ): ĠFocus Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠ ĠfullName . endsWith (" ?") Ġ-> ĠNullable ( fullName , Ġparam Name ) ĊĠĠĠĠĠ ĠfullName . startsWith (" ` arrow `.` core `.` Option ` ") Ġ-> ĠOption ( fullName , Ġparam Name ) ĊĠĠĠĠĠ Ġelse Ġ-> ĠNon Null ( fullName , Ġparam Name ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġpublic Ġabstract Ġval ĠclassName : ĠString ĊĠ Ġpublic Ġabstract Ġval Ġparam Name : ĠString ĊĊĠ Ġpublic Ġdata Ġclass ĠNullable ( override Ġval ĠclassName : ĠString , Ġoverride Ġval Ġparam Name : ĠString ) Ġ: ĠFocus () Ġ{ ĊĠĠĠ Ġpublic Ġval Ġnon Null ClassName : ĠString Ġ= ĠclassName . drop Last ( 1 ) ĊĠ Ġ} ĊĊĠ Ġpublic Ġdata Ġclass ĠOption ( override Ġval ĠclassName : ĠString , Ġoverride Ġval Ġparam Name : ĠString ) Ġ: ĠFocus () Ġ{ ĊĠĠĠ Ġpublic Ġval Ġnested ClassName : ĠString Ġ= ĠRegex (" ` arrow `.` core `.` Option ` <( .* )> $ "). match Ent ire ( className ) !!. group Values [ 1 ] ĊĠ Ġ} ĊĊĠ Ġpublic Ġdata Ġclass ĠNon Null ( override Ġval ĠclassName : ĠString , Ġoverride Ġval Ġparam Name : ĠString ) Ġ: ĠFocus () Ċ } Ċ Ċ public Ġconst Ġval ĠLens : ĠString Ġ= Ġ" arrow . opt ics . Lens " Ċ public Ġconst Ġval ĠI so : ĠString Ġ= Ġ" arrow . opt ics . Iso " Ċ public Ġconst Ġval ĠOptional : ĠString Ġ= Ġ" arrow . opt ics . Optional " Ċ public Ġconst Ġval ĠPrism : ĠString Ġ= Ġ" arrow . opt ics . Prism " Ċ public Ġconst Ġval ĠGetter : ĠString Ġ= Ġ" arrow . opt ics . Getter " Ċ public Ġconst Ġval ĠSetter : ĠString Ġ= Ġ" arrow . opt ics . Setter " Ċ public Ġconst Ġval ĠTra versal : ĠString Ġ= Ġ" arrow . opt ics . Traversal " Ċ public Ġconst Ġval ĠFold : ĠString Ġ= Ġ" arrow . opt ics . Fold " Ċ public Ġconst Ġval ĠEvery : ĠString Ġ= Ġ" arrow . opt ics . Every " Ċ public Ġconst Ġval ĠTuple : ĠString Ġ= Ġ" arrow . core . Tuple " Ċ public Ġconst Ġval ĠPair : ĠString Ġ= Ġ" kotlin . Pair " Ċ public Ġconst Ġval ĠTrip le : ĠString Ġ= Ġ" kotlin . Triple " Ċ Ċ public Ġdata Ġclass ĠSn ippet ( ĊĠ Ġval Ġ` package `: ĠString , ĊĠ Ġval Ġname : ĠString , ĊĠ Ġval Ġimports : ĠSet < String > Ġ= Ġempty Set (), ĊĠ Ġval Ġcontent : ĠString Ċ ) Ġ{ ĊĠ Ġpublic Ġval Ġfq Name : ĠString Ġ= Ġ"$ ` package `. $ name " Ċ } Ċ Ċ public Ġfun ĠSn ippet . as File Text (): ĠString Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ if Ġ(` package ` Ġ!= Ġ"` unnamed Ġpackage ` ") Ġ" package Ġ$ ` package `" Ġelse Ġ"" } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ${ imports . join ToString ( prefix Ġ= Ġ"\ n ", Ġseparator Ġ= Ġ"\ n ", Ġpostfix Ġ= Ġ"\ n ")} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| $ content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin () Ċ