@ file : Suppress (" unused ") Ċ Ċ package Ġcom . squareup . an vil . compiler . internal Ċ Ċ import Ġcom . squareup . an vil . annotations . Experimental An vil Api Ċ import Ġcom . squareup . an vil . compiler . api . An vil Compilation Exception Ċ import Ġcom . squareup . an vil . compiler . internal . reference . Annotated Reference Ċ import Ġcom . squareup . an vil . compiler . internal . reference . Type Reference Ċ import Ġcom . squareup . an vil . compiler . internal . reference . can Resolve Fq Name Ċ import Ġcom . squareup . kotlin po et . Annotation Spec Ċ import Ġcom . squareup . kotlin po et . ClassName Ċ import Ġcom . squareup . kotlin po et . File Spec Ċ import Ġcom . squareup . kotlin po et . TypeName Ċ import Ġcom . squareup . kotlin po et . jvm . jvm Suppress W ild cards Ċ import Ġorg . jetbrains . kotlin . descriptors . Class Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Module Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Package Fragment Descriptor Ċ import Ġorg . jetbrains . kotlin . name . Class Id Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . resolve . descriptor Util . parents Ċ import Ġorg . jetbrains . kotlin . resolve . descriptor Util . parent sWith Self Ċ import Ġjava . io . ByteArray OutputStream Ċ Ċ @ Experimental An vil Api Ċ public Ġfun ĠClass Descriptor . as ClassName (): ĠClass Name Ġ= ĊĠ ĠClass Name ( ĊĠĠĠ ĠpackageName Ġ= Ġparents . filter Is Instance < Package Fragment Descriptor >(). first () ĊĠĠĠĠĠ Ġ. fq Name . safe Package String (), ĊĠĠĠ Ġsimple Names Ġ= Ġparent sWith Self . filter Is Instance < Class Descriptor >() ĊĠĠĠĠĠ Ġ. map Ġ{ Ġit . name . asString () Ġ} ĊĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠ Ġ. reversed () ĊĠ Ġ) Ċ Ċ @ Experimental An vil Api Ċ public Ġfun ĠF q Name . as ClassName ( module : ĠModule Descriptor ): ĠClass Name Ġ{ ĊĠ Ġreturn Ġas ClassName OrNull ( module ) ĊĠĠĠ Ġ?: Ġthrow ĠAn vil Compilation Exception (" Couldn 't Ġparse ĠClass Name Ġfor Ġ$ this .") Ċ } Ċ Ċ private Ġfun ĠF q Name . as ClassName OrNull ( module : ĠModule Descriptor ): ĠClass Name ? Ġ{ ĊĠ Ġval Ġsegments Ġ= Ġpath Segments (). map Ġ{ Ġit . asString () Ġ} ĊĊĠ Ġ// ĠIf Ġthe Ġfirst Ġsentence Ġcase Ġis Ġnot Ġthe Ġlast Ġsegment Ġof Ġthe Ġpath Ġit Ġbecomes Ġambiguous , ĊĠ Ġ// Ġfor Ġexample , Ġcom . Foo . Bar Ġcould Ġbe Ġan Ġinner Ġclass ĠBar Ġor Ġan Ġun conventional Ġpackage Ġcom . Foo . ĊĠ Ġval Ġcan Guess ClassName Ġ= Ġsegments . indexOf First Ġ{ Ġit [ 0 ]. is UpperCase () Ġ} Ġ== Ġsegments . size Ġ- Ġ 1 ĊĠ Ġif Ġ( can Guess ClassName ) Ġ{ ĊĠĠĠ Ġreturn ĠClass Name . best Guess ( asString ()) ĊĠ Ġ} ĊĊĠ Ġfor Ġ( index Ġin Ġ( segments . size Ġ- Ġ 1 ) Ġdown To Ġ 1 ) Ġ{ ĊĠĠĠ Ġval Ġpackage Segments Ġ= Ġsegments . sub List ( 0 , Ġindex ) ĊĠĠĠ Ġval Ġclass Segments Ġ= Ġsegments . sub List ( index , Ġsegments . size ) ĊĊĠĠĠ Ġval Ġvalid Fq Name Ġ= ĠF q Name . from Segments ( package Segments Ġ+ Ġclass Segments ) ĊĠĠĠĠĠ Ġ. can Resolve Fq Name ( module ) ĊĊĠĠĠ Ġif Ġ( valid Fq Name ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠClass Name ( ĊĠĠĠĠĠĠĠ ĠpackageName Ġ= Ġpackage Segments . join ToString ( separator Ġ= Ġ". "), ĊĠĠĠĠĠĠĠ Ġsimple Names Ġ= Ġclass Segments ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// ĠNo Ġmatching Ġclass Ġfound . ĠIt 's Ġeither Ġa Ġpackage Ġname Ġonly Ġor Ġdoesn 't Ġexist . ĊĠ Ġreturn Ġnull Ċ } Ċ Ċ @ Experimental An vil Api Ċ public Ġfun ĠClass Id . as ClassName (): ĠClass Name Ġ{ ĊĠ Ġreturn ĠClass Name ( ĊĠĠĠ ĠpackageName Ġ= Ġpackage Fq Name . asString (), ĊĠĠĠ Ġsimple Names Ġ= Ġrelative ClassName . path Segments (). map Ġ{ Ġit . asString () Ġ} ĊĠ Ġ) Ċ } Ċ Ċ @ Experimental An vil Api Ċ public Ġfun ĠType Name . with Jvm Suppress W ild cards IfNeeded ( ĊĠ Ġannotated Reference : ĠAnnot ated Reference , ĊĠ Ġtype Reference : ĠType Reference Ċ ): ĠType Name Ġ{ ĊĠ Ġ// ĠIf Ġthe Ġparameter Ġis Ġannotated Ġwith Ġ@ Jvm Suppress W ild cards , Ġthen Ġadd Ġthe Ġannotation ĊĠ Ġ// Ġto Ġour Ġtype Ġso Ġthat Ġthis Ġinformation Ġis Ġforwarded Ġwhen Ġour ĠFactory Ġis Ġcompiled . ĊĠ Ġval Ġhas Jvm Suppress W ild cards Ġ= Ġannotated Reference . is Annotated With ( jvm Suppress W ild cards Fq Name ) ĊĊĠ Ġ// ĠAdd Ġthe Ġ@ Jvm Suppress W ild cards Ġannotation Ġeven Ġfor Ġsimple Ġgeneric Ġreturn Ġtypes Ġlike ĊĠ Ġ// ĠSet < String >. ĠThis Ġavoids Ġsome Ġedge Ġcases Ġwhere ĠD agger Ġch okes . ĊĠ Ġval Ġis GenericType Ġ= Ġtype Reference . is GenericType () ĊĊĠ Ġ// ĠSame Ġfor Ġfunctions . ĊĠ Ġval Ġis FunctionType Ġ= Ġtype Reference . isFunction Type () ĊĊĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠ Ġhas Jvm Suppress W ild cards Ġ|| Ġis GenericType Ġ-> Ġthis . jvm Suppress W ild cards () ĊĠĠĠ Ġis FunctionType Ġ-> Ġthis . jvm Suppress W ild cards () ĊĠĠĠ Ġelse Ġ-> Ġthis ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠFile Spec . write ToString (): ĠString Ġ{ ĊĠ Ġval Ġstream Ġ= ĠByteArrayOutputStream () ĊĠ Ġstream . writer (). use Ġ{ ĊĠĠĠ ĠwriteTo ( it ) ĊĠ Ġ} ĊĠ Ġreturn Ġstream . toString () Ċ } Ċ Ċ private Ġfun ĠFile Spec . Builder . suppress Warnings () Ġ{ ĊĠ Ġadd Annotation ( ĊĠĠĠ ĠAnnotation Spec ĊĠĠĠĠĠ Ġ. builder ( Suppress :: class ) ĊĠĠĠĠĠ Ġ// ĠSup press Ġdeprecation Ġwarnings . ĊĠĠĠĠĠ Ġ. add Member ("\" DE PREC ATION \" ") ĊĠĠĠĠĠ Ġ// ĠSup press Ġerrors Ġfor Ġexperimental Ġfeatures Ġin Ġgenerated Ġcode . ĊĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Kotlin Version . CURRENT Ġ> ĠKotlin Version ( 1 , Ġ 6 , Ġ 1 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġadd Member ("\" OPT _ IN _ USAGE \" ") ĊĠĠĠĠĠĠĠĠĠ Ġadd Member ("\" OPT _ IN _ USAGE _ ERROR \" ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġadd Member ("\" EXPERIMENT AL _ API _ USAGE _ ERROR \" ") ĊĠĠĠĠĠĠĠĠĠ Ġadd Member ("\" EXPERIMENT AL _ API _ USAGE \" ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. build () ĊĠ Ġ) Ċ } Ċ Ċ @ Experimental An vil Api Ċ public Ġfun ĠFile Spec . Companion . build File ( ĊĠ ĠpackageName : ĠString , ĊĠ ĠfileName : ĠString , ĊĠ Ġgenerator Comment : ĠString Ġ= Ġ" Generated Ġby ĠAn vil .\ n https :// github . com / square / an vil ", ĊĠ Ġblock : ĠFile Spec . Builder . () Ġ-> ĠUnit Ċ ): ĠString Ġ= ĊĠ Ġbuilder ( packageName , ĠfileName ) ĊĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠ Ġ// ĠSup press Ġany Ġdeprecation Ġwarnings . ĊĠĠĠĠĠ Ġsuppress Warnings () ĊĊĠĠĠĠĠ Ġblock () ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. add Comment ( generator Comment ) ĊĠĠĠ Ġ. build () ĊĠĠĠ Ġ. write ToString () Ċ