package Ġfi . e vid ent . ap ina . java . reader Ċ Ċ import Ġfi . e vid ent . ap ina . java . model . Method Signature Ċ import Ġfi . e vid ent . ap ina . java . model . type . Java Type Ċ import Ġfi . e vid ent . ap ina . java . model . type . Type Schema Ċ import Ġorg . object web . asm . Type Ċ import Ġorg . object web . asm . signature . Signature Reader Ċ Ċ fun Ġparse Java Type ( type Descriptor : ĠString , Ġsignature : ĠString ?): ĠJava Type Ġ= ĊĠĠĠ Ġif Ġ( signature Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġparse GenericType ( signature ) ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġparse TypeDescriptor ( type Descriptor ) Ċ Ċ fun Ġparse GenericType ( signature : ĠString ): ĠJava Type Ġ{ ĊĠĠĠ Ġval Ġvisitor Ġ= ĠType Building Signature Visitor () ĊĊĠĠĠ ĠSignature Reader ( signature ). accept Type ( visitor ) ĊĊĠĠĠ Ġreturn Ġvisitor . get () Ċ } Ċ Ċ fun Ġparse TypeDescriptor ( type Descriptor : ĠString ) Ġ= Ġjava Type ( Type . getType ( type Descriptor )) Ċ Ċ fun Ġparse Basic TypeDescriptor ( type Descriptor : ĠString ): ĠJava Type . Basic Ġ= Ġparse TypeDescriptor ( type Descriptor ). to Basic Type () Ċ Ċ fun Ġparse ObjectType ( internal Name : ĠString ) Ġ= Ġjava Type ( Type . get ObjectType ( internal Name )) Ċ Ċ fun Ġparse Method Signature ( method Descriptor : ĠString , Ġsignature : ĠString ?): ĠMethod Signature Ġ{ ĊĠĠĠ Ġval Ġlegacy Signature Ġ= Ġparse MethodDescriptor ( method Descriptor ) ĊĠĠĠ Ġif Ġ( signature Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgeneric Signature Ġ= Ġparse Generic Method Signature ( signature ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThere Ġare Ġclasses Ġin Ġthe Ġwild Ġwith Ġdiffer ing Ġargument Ġcounts Ġfor Ġthe Ġtwo Ġsignatures . ĊĠĠĠĠĠĠĠ Ġ// ĠAt Ġleast Ġgu ava - jdk 5 - 1 3 . 0 's Ġcom / google / common / collect / Abstract Multimap $ Wrapped Sorted Set ĊĠĠĠĠĠĠĠ Ġ// Ġis Ġlike Ġthis . ĠAll Ġof Ġthe Ġcases Ġare Ġthe Ġsame : Ġthe Ġimplicit Ġparent - class Ġargument Ġas Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġfirst Ġargument Ġis Ġleft Ġout . ĠIf Ġwe Ġdetect Ġthat , Ġcreate Ġa Ġnew Ġargument Ġlist Ġmostly Ġbased ĊĠĠĠĠĠĠĠ Ġ// Ġon Ġthe Ġgeneric Ġsignature , Ġbut Ġusing Ġthe Ġparent Ġtype Ġfrom Ġnon - generic Ġdescriptor . ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( legacy Signature . argument Count Ġ== Ġgeneric Signature . argument Count Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimplicit Parent Type Ġ= Ġlegacy Signature . argument Types [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Signature ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeneric Signature . returnType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( implicit Parent Type ) Ġ+ Ġgeneric Signature . argument Types , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeneric Signature . schema ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( legacy Signature . argument Count Ġ== Ġgeneric Signature . argument Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeneric Signature ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġlegacy Signature Ċ } Ċ Ċ fun Ġparse Generic Method Signature ( signature : ĠString ): ĠMethod Signature Ġ{ ĊĠĠĠ Ġval Ġvisitor Ġ= ĠMethod Signature Visitor () ĊĊĠĠĠ ĠSignature Reader ( signature ). accept ( visitor ) ĊĊĠĠĠ Ġreturn Ġvisitor . get () Ċ } Ċ Ċ fun Ġparse MethodDescriptor ( method Descriptor : ĠString ): ĠMethod Signature Ġ{ ĊĠĠĠ Ġval Ġmethod Type Ġ= ĠType . getMethod Type ( method Descriptor ) ĊĊĠĠĠ Ġval ĠreturnType Ġ= Ġjava Type ( method Type . returnType ) ĊĠĠĠ Ġval Ġargument Types Ġ= Ġmethod Type . argument Types . map (:: java Type ) ĊĊĠĠĠ Ġreturn ĠMethod Signature ( returnType , Ġargument Types , ĠType Schema ()) Ċ } Ċ Ċ fun Ġjava Type ( type : ĠType ): ĠJava Type Ġ= ĊĠĠĠ Ġif Ġ( type . sort Ġ== ĠType . ARRAY ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġjava Type : ĠJava Type Ġ= ĠJava Type . Basic ( type . elementType . className ) ĊĊĠĠĠĠĠĠĠ Ġrepeat ( type . dimensions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava Type Ġ= ĠJava Type . Array ( java Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġjava Type ĊĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠJava Type . Basic ( type . className ) ĊĠĠĠ Ġ} Ċ