/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġthe Ġoriginal Ġauthor Ġor Ġauthors . Ċ Ġ* Ġ< p > Ċ Ġ* Ġ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 Ċ Ġ* Ġ< p > Ċ Ġ* Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ġ< p > Ċ Ġ* Ġ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 . open rewrite . java . tree Ċ Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . open rewrite . java . Java Parser Ċ Ċ interface ĠType Parameter And Wildcard Test Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbc Ġ= ĠlistOf (" public Ġinterface ĠB Ġ{}", Ġ" public Ġinterface ĠC Ġ{} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġannotated Type Parameters On Wildcard Bounds ( jp : ĠJava Parser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Source Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġjava . util . List ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList <? Ġextends Ġ@ NotNull ĠB > Ġchecks ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġjp . parse ( a Source , Ġ" public Ġclass ĠB Ġ{} ")[ 0 ] ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( a Source , Ġa . print ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġannotated Type Parameters On ReturnType Expression ( jp : ĠJava Parser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Source Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġjava . util . List ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠList < ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ NotNull ( groups Ġ= ĠPri or it ized . P 1 . class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ javax . validation . Valid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB > Ġfoo () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġjp . parse ( a Source , Ġ" public Ġclass ĠB Ġ{} ")[ 0 ] ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( a Source , Ġa . print ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġextends And Super ( jp : ĠJava Parser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġjp . parse (* array Of (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġjava . util . List ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġ< P Ġ Ġextends ĠB > Ġvoid Ġfoo ( List < P > Ġout , ĠList <? Ġsuper ĠC > Ġin ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ). plus ( bc ))[ 0 ] ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" public Ġ< P Ġ Ġextends ĠB > Ġvoid Ġfoo ( List < P > Ġout , ĠList <? Ġsuper ĠC > Ġin ) Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . classes [ 0 ]. methods [ 0 ]. print Trim med ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmultiple Ext ends ( jp : ĠJava Parser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġjp . parse (* array Of (" public Ġclass ĠA < ĠT Ġextends Ġ ĠB Ġ& ĠC Ġ> Ġ{} "). plus ( bc ))[ 0 ] ĊĠĠĠĠĠĠĠ ĠassertEquals (" public Ġclass ĠA < ĠT Ġextends Ġ ĠB Ġ& ĠC Ġ> Ġ{}", Ġa . print Trim med ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwildcard Ext ends ( jp : ĠJava Parser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġjp . parse (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġjava . util .*; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList < Ġ? Ġ Ġextends Ġ ĠB Ġ> Ġbs ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"" ", Ġ" public Ġclass ĠB Ġ{} ")[ 0 ] ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Param Ġ= Ġa . classes [ 0 ]. fields [ 0 ]. type Expr Ġas ĠJ . Parameterized Type ĊĠĠĠĠĠĠĠ ĠassertEquals (" List < Ġ? Ġ Ġextends Ġ ĠB Ġ> ", Ġtype Param . print ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġempty Wildcard ( jp : ĠJava Parser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġjp . parse (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġjava . util .*; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList < Ġ? Ġ> Ġa ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"" ")[ 0 ] ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Param Ġ= Ġa . classes [ 0 ]. fields [ 0 ]. type Expr Ġas ĠJ . Parameterized Type ĊĠĠĠĠĠĠĠ ĠassertEquals (" List < Ġ? Ġ> ", Ġtype Param . print ()) ĊĠĠĠ Ġ} Ċ } Ċ