/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠExp edia , ĠInc Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 Ġcom . exp edi ag roup . graphql . generator . extensions Ċ Ċ import Ġcom . exp edi ag roup . graphql . exceptions . Could Not GetName Of K Class Exception Ċ import Ġcom . exp edi ag roup . graphql . exceptions . Invalid ListType Exception Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . condition . Enabled On J re Ċ import Ġorg . junit . jupiter . api . condition . J RE Ċ import Ġkotlin . reflect . K Type Ċ import Ġkotlin . reflect . K Type Projection Ċ import Ġkotlin . reflect . full . create Type Ċ import Ġkotlin . reflect . full . find Parameter ByName Ċ import Ġkotlin . reflect . full . star Project ed Type Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assert Fails With Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠK Type Extensions Kt Test Ġ{ ĊĊĠĠĠ Ġclass ĠMy Class Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġlist Fun ( list : ĠList < String >) Ġ= Ġlist . join ToString ( separator Ġ= Ġ", ") Ġ{ Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġarray Fun ( array : ĠArray < String >) Ġ= Ġarray . join ToString ( separator Ġ= Ġ", ") Ġ{ Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġprimitive Array Fun ( int Array : ĠInt Array ) Ġ= ĠintArray . join ToString ( separator Ġ= Ġ", ") Ġ{ Ġit . toString () Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġstring Fun ( string : ĠString ) Ġ= Ġ" hello Ġ$ string " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠSimple Interface ĊĊĠĠĠ Ġclass ĠSimple Class ( val Ġid : ĠString ) Ġ: ĠSimple Interface ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget TypeOf First Argument () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( String :: class . star Project ed Type , ĠMy Class :: list Fun . find Parameter ByName (" list ") ?. type ?. getType Of First Argument ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( String :: class . star Project ed Type , ĠMy Class :: array Fun . find Parameter ByName (" array ") ?. type ?. getType Of First Argument ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Int :: class . star Project ed Type , ĠMy Class :: primitive Array Fun . find Parameter ByName (" int Array ") ?. type ?. get Wrapped Type ()) ĊĊĠĠĠĠĠĠĠ Ġassert Fails With ( Invalid ListType Exception :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Class :: string Fun . find Parameter ByName (" string ") ?. type ?. getType Of First Argument () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġassert Fails With ( Invalid ListType Exception :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmock Type : ĠK Type Ġ= Ġmock k () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Type . arguments Ġ} Ġreturns Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Type . getType Of First Argument () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġassert Fails With ( Invalid ListType Exception :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmock Argument : ĠK Type Projection Ġ= Ġmock k () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Argument . type Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmock Type : ĠK Type Ġ= Ġmock k () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Type . arguments Ġ} Ġreturns ĠlistOf ( mock Argument ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Type . getType Of First Argument () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget K Class () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( My Class :: class , ĠMy Class :: class . create Type (). get K Class ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget Java Class () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Type Ġ= ĠassertNotNull ( My Class :: list Fun . find Parameter ByName (" list ") ?. type ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( List :: class . java , Ġlist Type . get Java Class ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġarray Type Ġ= ĠassertNotNull ( My Class :: array Fun . find Parameter ByName (" array ") ?. type ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Array < String >:: class . java , Ġarray Type . get Java Class ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġprimitive ArrayType Ġ= ĠassertNotNull ( My Class :: primitive Array Fun . find Parameter ByName (" int Array ") ?. type ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( IntArray :: class . java , Ġprimitive ArrayType . get Java Class ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġstring Type Ġ= ĠassertNotNull ( My Class :: string Fun . find Parameter ByName (" string ") ?. type ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( String :: class . java , Ġstring Type . get Java Class ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġis Subclass Of () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( My Class :: class . star Project ed Type . is Subclass Of ( My Class :: class )) ĊĠĠĠĠĠĠĠ ĠassertTrue ( Simple Class :: class . star Project ed Type . is Subclass Of ( Simple Interface :: class )) ĊĠĠĠĠĠĠĠ ĠassertFalse ( Simple Interface :: class . star Project ed Type . is Subclass Of ( Simple Class :: class )) ĊĠĠĠĠĠĠĠ ĠassertFalse ( My Class :: class . star Project ed Type . is Subclass Of ( Simple Interface :: class )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget ArrayType () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( Int :: class . star Project ed Type , ĠInt Array :: class . star Project ed Type . get Wrapped Type ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Long :: class . star Project ed Type , ĠLong Array :: class . star Project ed Type . get Wrapped Type ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Short :: class . star Project ed Type , ĠShort Array :: class . star Project ed Type . get Wrapped Type ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Float :: class . star Project ed Type , ĠFloat Array :: class . star Project ed Type . get Wrapped Type ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Double :: class . star Project ed Type , ĠDouble Array :: class . star Project ed Type . get Wrapped Type ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Char :: class . star Project ed Type , ĠChar Array :: class . star Project ed Type . get Wrapped Type ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Boolean :: class . star Project ed Type , ĠBoolean Array :: class . star Project ed Type . get Wrapped Type ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( String :: class . star Project ed Type , ĠMy Class :: list Fun . find Parameter ByName (" list ") ?. type ?. get Wrapped Type ()) ĊĊĠĠĠĠĠĠĠ Ġassert Fails With ( Invalid ListType Exception :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy Class :: string Fun . find Parameter ByName (" string ") ?. type ?. get Wrapped Type () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO Ġremove ĠJ Unit Ġcondition Ġonce Ġwe Ġonly Ġbuild Ġartifacts Ġusing ĠJava Ġ 1 1 ĊĠĠĠ Ġ// Ġ ĠBLOCK ED : Ġin Ġorder Ġto Ġpublish Ġto ĠMaven ĠCentral Ġwe Ġneed Ġto Ġgenerate Ġjavadoc Ġjar , Ġblocked Ġuntil ĠD ok ka Ġhttps :// github . com / Kotlin / dok ka / issues / 2 9 4 Ġis Ġresolved ĊĠĠĠ Ġ// Ġ ĠISS UE : Ġwith ĠKotlin Ġ 1 . 3 . 4 0 + Ġthere Ġis Ġbug Ġon ĠJ RE Ġ 1 . 8 Ġthat Ġresults Ġin Ġincorrect Ġsimple Ġname Ġof Ġthe Ġanonymous Ġclasses , Ġsee Ġhttps :// yout rack . jetbrains . com / issue / KT - 2 3 0 7 2 ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Enabled On J re ( J RE . JAVA _ 1 1 ) ĊĠĠĠ Ġfun Ġget Simple Name () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals (" My Class ", ĠMy Class :: class . star Project ed Type . getSimpleName ()) ĊĠĠĠĠĠĠĠ ĠassertEquals (" My Class Input ", ĠMy Class :: class . star Project ed Type . getSimpleName ( is InputType Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠ Ġassert Fails With ( Could Not GetName Of K Class Exception :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ{} :: class . star Project ed Type . getSimpleName () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO Ġremove Ġthis ĠJ Unit Ġonce Ġwe Ġonly Ġbuild Ġartifacts Ġusing ĠJava Ġ 1 1 ĊĠĠĠ Ġ// Ġ ĠBLOCK ED : Ġin Ġorder Ġto Ġpublish Ġto ĠMaven ĠCentral Ġwe Ġneed Ġto Ġgenerate Ġjavadoc Ġjar , Ġblocked Ġuntil ĠD ok ka Ġhttps :// github . com / Kotlin / dok ka / issues / 2 9 4 Ġis Ġresolved ĊĠĠĠ Ġ// Ġ ĠISS UE : Ġwith ĠKotlin Ġ 1 . 3 . 4 0 + Ġthere Ġis Ġbug Ġon ĠJ RE Ġ 1 . 8 Ġthat Ġresults Ġin Ġincorrect Ġsimple Ġname Ġof Ġthe Ġanonymous Ġclasses , Ġsee Ġhttps :// yout rack . jetbrains . com / issue / KT - 2 3 0 7 2 ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Enabled On J re ( J RE . JAVA _ 8 ) ĊĠĠĠ Ġfun Ġget Simple Name Java 8 () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals (" My Class ", ĠMy Class :: class . star Project ed Type . getSimpleName ()) ĊĠĠĠĠĠĠĠ ĠassertEquals (" My Class Input ", ĠMy Class :: class . star Project ed Type . getSimpleName ( is InputType Ġ= Ġtrue )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġqualified Name () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals (" com . exp edi ag roup . graphql . generator . extensions . K Type Extensions Kt Test . My Class ", ĠMy Class :: class . star Project ed Type . qualified Name ) ĊĠĠĠĠĠĠĠ ĠassertEquals ("", Ġobject Ġ{ Ġ} :: class . star Project ed Type . qualified Name ) ĊĠĠĠ Ġ} Ċ } Ċ