package Ġcom . hex arch boot demo Ċ Ċ import Ġcom . hex arch boot demo . common . arch unit . Internal Package Ċ import Ġcom . t ng tech . arch unit . core . importer . Class File Importer Ċ import Ġcom . t ng tech . arch unit . lang . syntax . Arch Rule Definition . no Classes Ċ import Ġjava . io . IOException Ċ import Ġjava . util . stream . Collectors Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . reflection s . Reflection s Ċ Ċ /** Ċ Ġ* ĠEvalu ates Ġ[ Internal Package ] Ġannotations Ġand Ġchecks Ġthat Ġthose Ġpackages Ġare Ġnot Ġaccessed Ġfrom Ġthe Ġoutside . Ċ Ġ*/ Ċ internal Ġclass ĠInternal Package Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġanalyzed Classes Ġ= ĠClass File Importer (). import Packages ( BASE _ PACKAGE ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġ` internal Ġpackages Ġare Ġnot Ġaccessed Ġfrom Ġoutside `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġso Ġthat Ġthe Ġtest Ġwill Ġbreak Ġwhen Ġthe Ġbase Ġpackage Ġis Ġre - named ĊĠĠĠĠĠĠĠ Ġassert Package Exists ( BASE _ PACKAGE ) ĊĠĠĠĠĠĠĠ Ġval Ġinternal Packages Ġ= Ġinternal Packages ( BASE _ PACKAGE ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( internal Package Ġin Ġinternal Packages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Package Exists ( internal Package ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Package IsNot Ac cessed From Outside ( internal Package ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFinds Ġall Ġpackages Ġannotated Ġwith Ġ@ [ Internal Package ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinternal Packages ( base Package : ĠString ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreflection s Ġ= ĠReflection s ( base Package ) ĊĠĠĠĠĠĠĠ Ġreturn Ġreflection s . get Types Annotated With ( Internal Package :: class . java ). stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ({ Ġc Ġ-> Ġc . get Package (). getName () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( Collectors . toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġassert Package IsNot Ac cessed From Outside ( internal Package : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġno Classes (). that (). res ide Outside Of Package ( package Matcher ( internal Package )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. should (). depend On Classes That (). res ide In AP ackage ( package Matcher ( internal Package )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( analy zed Classes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġassert Package Exists ( packageName : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( analy zed Classes . contain Package ( packageName )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` as ` (" package Ġ% s Ġexists ", ĠpackageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isTrue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpackage Matcher ( fully Qualified Package : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ fully Qualified Package .." ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠBASE _ PACKAGE Ġ= ĠInternal Package Test :: class . java .` package `. name ĊĠĠĠ Ġ} Ċ } Ċ