/************************************************************************ ***** Ċ Ġ* ĠCopyright Ġ( C ) Ġj parse c . org ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* Ġ------------------------------------------------------------------------- Ġ* Ċ Ġ* Ġ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 ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ċ Ġ* Ġ* Ċ Ġ* Ġhttp :// 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 Ġorg . j parse c . examples . java . parser Ċ Ċ import Ġorg . j parse c . examples . java . ast . declaration .* Ċ import Ġorg . j parse c . examples . java . parser . Terminal Parser Test . Companion . assert Failure Ċ import Ġorg . j parse c . examples . java . parser . Terminal Parser Test . Companion . assert Result Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Test Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠUnit Ġtest Ġfor Ġ[ Declaration Parser ]. Ċ Ġ* Ċ Ġ* Ġ@ author ĠBen ĠY u Ċ Ġ*/ Ċ class ĠDeclaration Parser Test Ġ{ ĊĠĠĠ Ġ@ Test Ġfun Ġtest Remove Null s () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist : ĠList < *> Ġ= ĠArrayList ( listOf (" a ", Ġ" b ", Ġnull , Ġ" 1 ", Ġ" 2 ", Ġnull )) ĊĠĠĠĠĠĠĠ ĠDeclaration Parser . remove Null s ( list ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf (" a ", Ġ" b ", Ġ" 1 ", Ġ" 2 "), Ġlist ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Field Def () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Result ( FIELD , Ġ" int Ġf ;", ĠField Def :: class . java , Ġ" int Ġf ; ") ĊĠĠĠĠĠĠĠ Ġassert Result ( FIELD , Ġ" static Ġfinal Ġint Ġf ;", ĠField Def :: class . java , Ġ" static Ġfinal Ġint Ġf ; ") ĊĠĠĠĠĠĠĠ Ġassert Result ( FIELD , Ġ" int Ġf Ġ= Ġfoo ;", ĠField Def :: class . java , Ġ" int Ġf Ġ= Ġfoo ; ") ĊĠĠĠĠĠĠĠ Ġassert Result ( FIELD , Ġ" int [] Ġa Ġ= Ġ{ foo }; ", ĠField Def :: class . java , Ġ" int [] Ġa Ġ= Ġ{ foo }; ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Body () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠDeclaration Parser . body ( FIELD ) ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ"{}", ĠDef Body :: class . java , Ġ"{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ"{ int Ġf ; }", ĠDef Body :: class . java , Ġ"{ int Ġf ;} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ"{ int Ġf = foo ; Ġint Ġg ; }", ĠDef Body :: class . java , Ġ"{ int Ġf Ġ= Ġfoo ; Ġint Ġg ;} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ"{ ; int Ġf = foo ;;; Ġint Ġg ;; }", ĠDef Body :: class . java , Ġ"{ int Ġf Ġ= Ġfoo ; Ġint Ġg ;} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Type Parameter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠDeclaration Parser . TYPE _ PARAMETER ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" T ", ĠType Parameter Def :: class . java , Ġ" T ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" T Ġextends ĠF ", ĠType Parameter Def :: class . java , Ġ" T Ġextends ĠF ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" T Ġextends ĠEnum < T >", ĠType Parameter Def :: class . java , Ġ" T Ġextends ĠEnum < T >") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" T Ġextends ĠEnum <? >", ĠType Parameter Def :: class . java , Ġ" T Ġextends ĠEnum <?> ") ĊĠĠĠĠĠĠĠ Ġassert Failure ( parser , Ġ" T Ġextends Ġ?", Ġ 1 , Ġ 1 1 , Ġ"? Ġencountered .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Method Def () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠDeclaration Parser . method Def ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatement Parser . SYSTEM _ MODI FIER , ĠExpression Parser . IDENTIFIER , ĠStatement Parser . BREAK ) ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" public Ġstatic Ġvoid Ġf (); ", ĠMethod Def :: class . java , Ġ" public Ġstatic Ġvoid Ġf (); ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" String Ġf () Ġdefault Ġfoo ;", ĠMethod Def :: class . java , Ġ" String Ġf () Ġdefault Ġfoo ; ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" void Ġf () Ġthrows ĠE ;", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Def :: class . java , Ġ" void Ġf () Ġthrows ĠE ; ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" void Ġf () Ġthrows ĠE , ĠF < T >; ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Def :: class . java , Ġ" void Ġf () Ġthrows ĠE , ĠF < T >; ") ĊĠĠĠĠĠĠĠ Ġassert Failure ( parser , Ġ" void Ġf () Ġthrows ", Ġ 1 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġassert Failure ( parser , Ġ" void Ġf () Ġthrows ĠE []; ", Ġ 1 , Ġ 1 8 ) ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" void Ġf () Ġ{}", ĠMethod Def :: class . java , Ġ" void Ġf () Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" void Ġf () Ġ{ break ; Ġbreak ; }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Def :: class . java , Ġ" void Ġf () Ġ{ break ; Ġbreak ;} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" void Ġf ( int Ġi ) Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Def :: class . java , Ġ" void Ġf ( int Ġi ) Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" void Ġf ( final Ġint Ġi , ĠList < Foo > Ġl ) Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Def :: class . java , Ġ" void Ġf ( final Ġint Ġi , ĠList < Foo > Ġl ) Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ"< K , ĠV Ġextends ĠK > Ġvoid Ġf ( int Ġi ) Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMethod Def :: class . java , Ġ"< K , ĠV Ġextends ĠK > Ġvoid Ġf ( int Ġi ) Ġ{} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Constructor Def () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠDeclaration Parser . constructor Def ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatement Parser . SYSTEM _ MODI FIER , ĠStatement Parser . BREAK ) ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" public ĠFoo () {}", ĠConstructor Def :: class . java , Ġ" public ĠFoo () Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" Foo () Ġthrows ĠE { break ; }", ĠConstructor Def :: class . java , Ġ" Foo () Ġthrows ĠE Ġ{ break ;} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" Foo ( int Ġi ) Ġ{}", ĠConstructor Def :: class . java , Ġ" Foo ( int Ġi ) Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" Foo ( final Ġint Ġi , ĠList < Foo > Ġl ) Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstructor Def :: class . java , Ġ" Foo ( final Ġint Ġi , ĠList < Foo > Ġl ) Ġ{} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Initializer Def () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠDeclaration Parser . initializer Def ( Statement Parser . BREAK ) ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" static Ġ{}", ĠClass Initializer Def :: class . java , Ġ" static Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" static Ġ{ break ; }", ĠClass Initializer Def :: class . java , Ġ" static Ġ{ break ;} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" Ġ{}", ĠClass Initializer Def :: class . java , Ġ"{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" Ġ{ break ; }", ĠClass Initializer Def :: class . java , Ġ"{ break ;} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Class Def () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠDeclaration Parser . class Def ( Statement Parser . SYSTEM _ MODI FIER , ĠFIELD ) ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" public Ġfinal Ġclass ĠFoo Ġ{}", ĠClass Def :: class . java , Ġ" public Ġfinal Ġclass ĠFoo Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" final Ġclass ĠFoo < T > Ġ{}", ĠClass Def :: class . java , Ġ" final Ġclass ĠFoo < T > Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" final Ġclass ĠFoo < T Ġextends ĠFoo < T >, ĠK > Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Def :: class . java , Ġ" final Ġclass ĠFoo < T Ġextends ĠFoo < T >, ĠK > Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" final Ġclass ĠFoo < T Ġextends ĠFoo < T >> Ġextends ĠArrayList <?> Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Def :: class . java , Ġ" final Ġclass ĠFoo < T Ġextends ĠFoo < T >> Ġextends ĠArrayList <?> Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" final Ġclass ĠFoo < T Ġextends ĠFoo < T >> Ġimplements ĠList <?> Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Def :: class . java , Ġ" final Ġclass ĠFoo < T Ġextends ĠFoo < T >> Ġimplements ĠList <?> Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" final Ġclass ĠFoo < T Ġextends ĠFoo < T >> Ġimplements ĠList <? >, ĠIterable < T > Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Def :: class . java , Ġ" final Ġclass ĠFoo < T Ġextends ĠFoo < T >> Ġimplements ĠList <? >, ĠIterable < T > Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" final Ġclass ĠFoo < T Ġextends ĠFoo < T >> Ġ{ public Ġstatic Ġfinal ĠString ĠS Ġ= Ġfoo ; }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Def :: class . java , Ġ" final Ġclass ĠFoo < T Ġextends ĠFoo < T >> Ġ{ public Ġstatic Ġfinal ĠString ĠS Ġ= Ġfoo ;} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" final Ġclass ĠFoo < T Ġextends ĠFoo < T >> Ġ{ int Ġi ; Ġint Ġj ; }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Def :: class . java , Ġ" final Ġclass ĠFoo < T Ġextends ĠFoo < T >> Ġ{ int Ġi ; Ġint Ġj ;} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Interface Def () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠDeclaration Parser . interface Def ( Statement Parser . SYSTEM _ MODI FIER , ĠFIELD ) ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" public Ġnative Ġinterface ĠFoo Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInterface Def :: class . java , Ġ" public Ġnative Ġinterface ĠFoo Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" interface ĠFoo < T > Ġ{}", ĠInterface Def :: class . java , Ġ" interface ĠFoo < T > Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" interface ĠFoo < T Ġextends ĠFoo < T >, ĠK > Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInterface Def :: class . java , Ġ" interface ĠFoo < T Ġextends ĠFoo < T >, ĠK > Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" interface ĠFoo < T Ġextends ĠFoo < T >> Ġextends ĠList <?> Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInterface Def :: class . java , Ġ" interface ĠFoo < T Ġextends ĠFoo < T >> Ġextends ĠList <?> Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Failure ( parser , Ġ" interface ĠFoo Ġimplements ĠList Ġ{}", Ġ 1 , Ġ 1 5 , Ġ" implements Ġencountered .") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" interface ĠFoo < T Ġextends ĠFoo < T >> Ġextends ĠList <? >, ĠIterable < T > Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInterface Def :: class . java , Ġ" interface ĠFoo < T Ġextends ĠFoo < T >> Ġextends ĠList <? >, ĠIterable < T > Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" interface ĠFoo < T Ġextends ĠFoo < T >> Ġ{ public Ġstatic ĠString ĠS Ġ= Ġfoo ; }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInterface Def :: class . java , Ġ" interface ĠFoo < T Ġextends ĠFoo < T >> Ġ{ public Ġstatic ĠString ĠS Ġ= Ġfoo ;} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" interface ĠFoo < T Ġextends ĠFoo < T >> Ġ{ int Ġi ; Ġint Ġj ; }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInterface Def :: class . java , Ġ" interface ĠFoo < T Ġextends ĠFoo < T >> Ġ{ int Ġi ; Ġint Ġj ;} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Annotation Def () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠDeclaration Parser . annotation Def ( Statement Parser . modifier ( Expression Parser . IDENTIFIER ), ĠFIELD ) ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ"@ interface ĠFoo {}", ĠAnnotation Def :: class . java , Ġ"@ interface ĠFoo Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ"@ Target ({ METHOD , ĠFIELD }) Ġ@ RetentionPolicy ( RUNTIME ) Ġ@ interface ĠFoo {}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnnotation Def :: class . java , Ġ"@ Target ({ METHOD , ĠFIELD }) Ġ@ RetentionPolicy ( RUNTIME ) Ġ@ interface ĠFoo Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ"@ interface ĠFoo { int Ġi ; int Ġj ; }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnnotation Def :: class . java , Ġ"@ interface ĠFoo Ġ{ int Ġi ; Ġint Ġj ;} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Enum Def () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠDeclaration Parser . enum Def ( Expression Parser . IDENTIFIER , ĠFIELD ) ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" enum ĠFoo Ġ{}", ĠEnum Def :: class . java , Ġ" enum ĠFoo Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" enum ĠFoo Ġ{ FOO { int Ġx ; }} ", ĠEnum Def :: class . java , Ġ" enum ĠFoo Ġ{ FOO Ġ{ int Ġx ; }} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ"@ For ( Test ) Ġenum ĠFoo Ġ{}", ĠEnum Def :: class . java , Ġ"@ For ( Test ) Ġenum ĠFoo Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" enum ĠFoo Ġimplements ĠComparable < Foo >, ĠSerializable Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnum Def :: class . java , Ġ" enum ĠFoo Ġimplements ĠComparable < Foo >, ĠSerializable Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" enum ĠFoo Ġ{ ONE , ĠTWO ( two ); Ġint Ġi ; Ġint Ġj ; }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnum Def :: class . java , Ġ" enum ĠFoo Ġ{ ONE , ĠTWO ( two ); Ġint Ġi ; Ġint Ġj ;} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" enum ĠFoo Ġ{ ONE , ĠTWO }", ĠEnum Def :: class . java , Ġ" enum ĠFoo Ġ{ ONE , ĠTWO }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest QualifiedName () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠDeclaration Parser . QUAL IFI ED _ NAME ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" foo . bar ", ĠQual ified Name :: class . java , Ġ" foo . bar ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" foo ", ĠQual ified Name :: class . java , Ġ" foo ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Package () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠDeclaration Parser . PACKAGE ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" package Ġfoo . bar ;", ĠQual ified Name :: class . java , Ġ" foo . bar ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" package Ġfoo ;", ĠQual ified Name :: class . java , Ġ" foo ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Import () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠDeclaration Parser . IMPORT ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" import Ġfoo ;", ĠImport :: class . java , Ġ" import Ġfoo ; ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" import Ġfoo . bar ;", ĠImport :: class . java , Ġ" import Ġfoo . bar ; ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" import Ġfoo . bar .*; ", ĠImport :: class . java , Ġ" import Ġfoo . bar .*; ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" import Ġstatic Ġfoo ;", ĠImport :: class . java , Ġ" import Ġstatic Ġfoo ; ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" import Ġstatic Ġfoo .*; ", ĠImport :: class . java , Ġ" import Ġstatic Ġfoo .*; ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġtest Program () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠDeclaration Parser . program () ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" package Ġfoo ; Ġimport Ġfoo . bar .*; Ġclass ĠFoo Ġ{ int [] Ġa Ġ= Ġ{ 1 }; ĠFoo (){ }} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProgram :: class . java , Ġ" package Ġfoo ; Ġimport Ġfoo . bar .*; Ġclass ĠFoo Ġ{ int [] Ġa Ġ= Ġ{ 1 }; ĠFoo () Ġ{}} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" class ĠFoo Ġ{ {} Ġstatic Ġ{}} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProgram :: class . java , Ġ" class ĠFoo Ġ{ {} Ġstatic Ġ{}} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" package Ġfoo ; Ġimport Ġfoo . bar .*; Ġenum ĠFoo Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProgram :: class . java , Ġ" package Ġfoo ; Ġimport Ġfoo . bar .*; Ġenum ĠFoo Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" enum ĠFoo Ġ{ ; static Ġ{ 1 ;} Ġstatic Ġ{ 2 ;} Ġ{ 3 ;} Ġ{ 4 ; }} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProgram :: class . java , Ġ" enum ĠFoo Ġ{ ; Ġstatic Ġ{ 1 ;} Ġstatic Ġ{ 2 ;} Ġ{ 3 ;} Ġ{ 4 ; }} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" package Ġfoo ; Ġimport Ġfoo . bar .*; Ġinterface ĠFoo Ġ{ int Ġi Ġ= Ġ 1 ; }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProgram :: class . java , Ġ" package Ġfoo ; Ġimport Ġfoo . bar .*; Ġinterface ĠFoo Ġ{ int Ġi Ġ= Ġ 1 ;} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" package Ġfoo ; Ġimport Ġfoo . bar .*; Ġ@ interface ĠFoo Ġ{ int [] Ġvalue () Ġdefault Ġ{ 1 }; }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProgram :: class . java , Ġ" package Ġfoo ; Ġimport Ġfoo . bar .*; Ġ@ interface ĠFoo Ġ{ int [] Ġvalue () Ġdefault Ġ{ 1 }; }") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" import Ġfoo . bar .*; Ġclass ĠFoo < T > Ġimplements ĠBar Ġ{} Ġinterface ĠBar Ġ{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProgram :: class . java , Ġ" import Ġfoo . bar .*; Ġclass ĠFoo < T > Ġimplements ĠBar Ġ{} Ġinterface ĠBar Ġ{} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" class ĠFoo Ġ{ class ĠBar Ġ{}} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProgram :: class . java , Ġ" class ĠFoo Ġ{ class ĠBar Ġ{}} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" class ĠFoo Ġ{ private Ġstatic Ġfinal Ġclass ĠBar Ġ{}} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProgram :: class . java , Ġ" class ĠFoo Ġ{ private Ġstatic Ġfinal Ġclass ĠBar Ġ{}} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" class ĠFoo Ġ{ enum ĠBar Ġ{ B }} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProgram :: class . java , Ġ" class ĠFoo Ġ{ enum ĠBar Ġ{ B }} ") ĊĠĠĠĠĠĠĠ Ġassert Result ( parser , Ġ" class ĠFoo Ġ{@ interface ĠBar Ġ{ ;; }} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProgram :: class . java , Ġ" class ĠFoo Ġ{@ interface ĠBar Ġ{}} ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠFIELD Ġ= ĠDeclaration Parser . field Def ( Expression Parser . IDENTIFIER ) ĊĠĠĠ Ġ} Ċ }