package Ġedu . kit . compiler . semantic . visitor Ċ Ċ import Ġedu . kit . compiler . semantic . do Name Analysis Ċ import Ġedu . kit . compiler . utils . assert Annotations Ċ import Ġedu . kit . compiler . utils . create Semantic AST Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertFalse Ċ Ċ internal Ġclass ĠUn used Declaration Visitor Test Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġcheck ( annotations : ĠList < String >, Ġinput : Ġ() Ġ-> ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( ast , Ġsource File , Ġstring Table ) Ġ= Ġcreate Semantic AST ( input ()) ĊĊĠĠĠĠĠĠĠ Ġdo Name Analysis ( ast , Ġsource File , Ġstring Table ) ĊĠĠĠĠĠĠĠ Ġsource File . print Annotations () ĊĠĠĠĠĠĠĠ ĠassertFalse ( source File . has Error ) ĊĊĠĠĠĠĠĠĠ Ġast . accept ( Unused Declaration Visitor ( source File )) ĊĊĠĠĠĠĠĠĠ Ġassert Annotations ( annotations , Ġsource File ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Unused () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ" class Ġ` Main ` Ġis Ġnever Ġused " Ġ-> Ġnot Ġunused , Ġbecause Ġmain Ġclass ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ" method Ġ` Main . main (... )` Ġis Ġnever Ġused " Ġ-> Ġnot Ġunused , Ġbecause Ġmain Ġmethod ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" class Ġ` Unused Class ` Ġis Ġnever Ġused ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" variable Ġ` u 3 ` Ġis Ġnever Ġused ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" parameter Ġ` u 4 ` Ġis Ġnever Ġused ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" method Ġ` Used . unused (... )` Ġis Ġnever Ġused ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" field Ġ` Used . u 5 ` Ġis Ġnever Ġused ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ" method Ġ` Unused Class . test ()` Ġis Ġnever Ġused " Ġ-> Ġunused , Ġbut Ġsupp ressed Ġbecause Ġcontaining Ġclass Ġis Ġalso Ġunused ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠMain Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġmain ( String [] Ġargs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUsed Ġu 1 Ġ= Ġnew ĠUsed (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu 1 . test (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUsed Ġu 2 Ġ= Ġnull ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( u 1 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu 2 . test (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠUsed 2 Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠUn used Class Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġvoid Ġtest () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUsed 2 Ġu 3 Ġ= Ġnull ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠUsed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġvoid Ġtest ( Used 2 Ġu 4 ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġvoid Ġunused () Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic ĠUsed Ġu 5 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Used Only In New Expression () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġclass Ġ` b ` Ġis Ġnever Ġused ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Ġtest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġmain ( String [] Ġargs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Ġb (). println ( 1 ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass Ġb Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġvoid Ġprintln ( int Ġq ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (- q ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Unused Field In Main Class () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" field Ġ` Test . a ` Ġis Ġnever Ġused ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" field Ġ` Test . b ` Ġis Ġnever Ġused ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠTest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġint Ġa ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġint Ġb ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġmain ( String [] Ġargs ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ