/* Ċ Ġ* Ġ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 . cleanup Ċ Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . open rewrite . Issue Ċ import Ġorg . open rewrite . Recipe Ċ import Ġorg . open rewrite . Tree . random Id Ċ import Ġorg . open rewrite . java . Java Parser Ċ import Ġorg . open rewrite . java . Java Recipe Test Ċ import Ġorg . open rewrite . java . style . Hide Utility Class Constructor Style Ċ import Ġorg . open rewrite . style . Named Styles Ċ Ċ interface ĠHide Utility Class Constructor Test Ġ: ĠJava Recipe Test Ġ{ ĊĠĠĠ Ġoverride Ġval Ġrecipe : ĠRecipe ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠHide Utility Class Constructor () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShould Ġbe Ġa Ġutility Ġclass Ġsince Ġall Ġmethods Ġare Ġstatic , Ġbut Ġclass Ġhas Ġpublic Ġconstructor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġchange Public Constructor To Private ( jp : ĠJava Parser ) Ġ= Ġassert Changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠ Ġafter Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġchange Package Private Constructor To Private ( jp : ĠJava Parser ) Ġ= Ġassert Changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠ Ġafter Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġidentify Utility Classes With Protected Constructor ( jp : ĠJava Parser ) Ġ= Ġassert Un changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprotected ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġchange Utility Classes With Mixed Ex posed Construct ors ( jp : ĠJava Parser ) Ġ= Ġassert Changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprotected ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠA ( String Ġa ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA ( String Ġa , ĠString Ġb ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate ĠA ( String Ġa , ĠString Ġb , ĠString Ġc ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠ Ġafter Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprotected ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate ĠA ( String Ġa ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate ĠA ( String Ġa , ĠString Ġb ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate ĠA ( String Ġa , ĠString Ġb , ĠString Ġc ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShould Ġbe Ġa Ġutility Ġclass Ġsince Ġall Ġmethods Ġare Ġstatic , Ġbut Ġclass Ġhas Ġno Ġconstructor Ġ( default / package - private ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġadd Private Constructor When Only Default Constructor ( jp : ĠJava Parser ) Ġ= Ġassert Changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠMath Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġfinal Ġint ĠTWO Ġ= Ġ 2 ; ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġint Ġadd Two ( int Ġa ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġa Ġ+ ĠTWO ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠ Ġafter Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠMath Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġfinal Ġint ĠTWO Ġ= Ġ 2 ; ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġint Ġadd Two ( int Ġa ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġa Ġ+ ĠTWO ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate ĠMath () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Issue (" https :// github . com / open rewrite / rewrite / issues / 5 3 8 ") ĊĠĠĠ Ġfun Ġignore Classes With Main Method ( jp : ĠJava Parser ) Ġ= Ġassert Un changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġa ; ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġmain ( String [] Ġargs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSpring Application . run ( A . class , Ġargs ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShould Ġbe Ġa Ġutility Ġclass Ġsince Ġall Ġfields Ġare Ġstatic , Ġbut Ġclass Ġhas Ġpublic Ġconstructor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġidentify Utility Classes Only StaticFields ( jp : ĠJava Parser ) Ġ= Ġassert Changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġint Ġa ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠ Ġafter Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġint Ġa ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNot Ġa Ġutility Ġclass Ġsince Ġthe Ġclass Ġimplements Ġan Ġinterface ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġidentify Non Utility Classes When Implements Interface ( jp : ĠJava Parser ) Ġ= Ġassert Un changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġdepends On Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġinterface ĠB Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġimplements ĠB Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB . utility (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNot Ġa Ġutility Ġclass Ġsince Ġthe Ġclass Ġextends Ġanother ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġidentify Non Utility Classes When Ext ends Class ( jp : ĠJava Parser ) Ġ= Ġassert Un changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġdepends On Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠB Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġextends ĠB Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġdo Something () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNot Ġa Ġutility Ġclass Ġsince Ġsome Ġfields Ġare Ġstatic , Ġbut Ġat Ġleast Ġone Ġnon - static ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġidentify Non Utility Classes Mixed Fields ( jp : ĠJava Parser ) Ġ= Ġassert Un changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġint Ġa ; ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġint Ġb ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShould Ġbe Ġa Ġutility Ġclass Ġsince Ġall Ġmethods Ġare Ġstatic , Ġbut Ġclass Ġhas Ġpublic Ġconstructor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġidentify Utility Classes Only Static Methods ( jp : ĠJava Parser ) Ġ= Ġassert Changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility ( String [] Ġargs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġutility (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠ Ġafter Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility ( String [] Ġargs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġutility (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInner Ġclass Ġshould Ġbe Ġa Ġutility Ġclass Ġsince Ġall Ġit 's Ġmethods Ġare Ġstatic , Ġbut Ġit Ġhas Ġpublic Ġconstructor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġidentify Utility Classes Inner Static Classes ( jp : ĠJava Parser ) Ġ= Ġassert Changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatic Ġclass ĠInner Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠInner () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠ Ġafter Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatic Ġclass ĠInner Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate ĠInner () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNot Ġa Ġutility Ġclass Ġsince Ġsome Ġmethods Ġare Ġstatic , Ġbut Ġat Ġleast Ġone Ġnon - static ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġidentify Non Utility Classes Mixed Methods ( jp : ĠJava Parser ) Ġ= Ġassert Un changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġsome Static () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġvoid Ġnot Static () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Issue (" https :// github . com / open rewrite / rewrite / issues / 1 0 6 0 ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġidentify Abstract Class ( jp : ĠJava Parser ) Ġ= Ġassert Un changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġabstract Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġsome Static 1 () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġsome Static 2 () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġidentify Non Utility Classes Only Public Constructor ( jp : ĠJava Parser ) Ġ= Ġassert Un changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġidentify Non Utility Classes Tot ally Empty ( jp : ĠJava Parser ) Ġ= Ġassert Un changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdont Change Sup pressed Utility Classes ( jp : ĠJava Parser . Builder < *, Ġ* >) Ġ= Ġassert Un changed ( ĊĠĠĠĠĠĠĠ Ġjp . styles ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNamed Styles ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Id (), Ġ" test ", Ġ" test ", Ġ" test ", Ġempty Set (), ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHide Utility Class Constructor Style ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ lo mbok . experimental . Utility Class ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ lo mbok . Data ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" @ java . lang . SuppressWarnings (" check style : Hide Utility Class Constructor ") """ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). build (), ĊĠĠĠĠĠĠĠ Ġdepends On Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġlombok . experimental ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġ@ interface ĠUtility Class Ġ{} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġlombok . experimental . Utility Class ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Utility Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠDo Not Change Me A Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ SuppressWarnings (" check style : Hide Utility Class Constructor ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠDo Not Change Me B Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsupp ressed Utility Class With Different Argument ( jp : ĠJava Parser . Builder < *, Ġ* >) Ġ= Ġassert Changed ( ĊĠĠĠĠĠĠĠ Ġjp . styles ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNamed Styles ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Id (), Ġ" test ", Ġ" test ", Ġ" test ", Ġempty Set (), ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHide Utility Class Constructor Style ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (""" @ java . lang . SuppressWarnings (" check style : Hide Utility Class Constructor ") """) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). build (), ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ SuppressWarnings (" rewrite : I - can - change ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠChange Me A Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠ Ġafter Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ SuppressWarnings (" rewrite : I - can - change ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠChange Me A Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate ĠChange Me A () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Issue (" https :// github . com / open rewrite / rewrite / issues / 1 0 5 8 ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdoes Not Change Package Private Enum Constructor To Private ( jp : ĠJava Parser ) Ġ= Ġassert Un changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġenum ĠSome Enum Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA , B , C ; ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSome Enum () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Issue (" https :// github . com / open rewrite / rewrite / issues / 1 0 5 8 ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġenum Class ( jp : ĠJava Parser ) Ġ= Ġassert Un changed ( ĊĠĠĠĠĠĠĠ Ġjp , ĊĠĠĠĠĠĠĠ Ġbefore Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġenum ĠSome Enum Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA , B , C ; ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġutility () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ) Ċ } Ċ