package Ġio . gitlab . art urb os ch . de te kt . rules . style . optional Ċ Ċ import Ġio . gitlab . art urb os ch . de te kt . api . Code S mell Ċ import Ġio . gitlab . art urb os ch . de te kt . api . Config Ċ import Ġio . gitlab . art urb os ch . de te kt . api . De bt Ċ import Ġio . gitlab . art urb os ch . de te kt . api . Entity Ċ import Ġio . gitlab . art urb os ch . de te kt . api . Issue Ċ import Ġio . gitlab . art urb os ch . de te kt . api . Rule Ċ import Ġio . gitlab . art urb os ch . de te kt . api . Severity Ċ import Ġio . gitlab . art urb os ch . de te kt . rules . is Override Ċ import Ġorg . jetbrains . kotlin . cfg . When Checker Ċ import Ġorg . jetbrains . kotlin . psi . Kt Block Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt If Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Name Reference Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Named Function Ċ import Ġorg . jetbrains . kotlin . psi . Kt When Expression Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . siblings Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . binding Context Util . is Used As Expression Ċ import Ġorg . jetbrains . kotlin . resolve . calls . call Util . getType Ċ import Ġorg . jetbrains . kotlin . types . type Util . is Nothing Ċ import Ġorg . jetbrains . kotlin . types . type Util . is Unit Ċ import Ġorg . jetbrains . kotlin . utils . addTo Std lib . first Is Instance OrNull Ċ Ċ /** Ċ Ġ* ĠIt Ġis Ġnot Ġnecessary Ġto Ġdefine Ġa Ġreturn Ġtype Ġof Ġ` Unit ` Ġon Ġfunctions Ġor Ġto Ġspecify Ġa Ġl one ĠUnit Ġstatement . Ċ Ġ* ĠThis Ġrule Ġdetect s Ġand Ġreports Ġinstances Ġwhere Ġthe Ġ` Unit ` Ġreturn Ġtype Ġis Ġspecified Ġon Ġfunctions Ġand Ġthe Ġoccurrences Ċ Ġ* Ġof Ġa Ġl one ĠUnit Ġstatement . Ċ Ġ* Ċ Ġ* Ġ< non comp liant > Ċ Ġ* Ġfun Ġfoo (): ĠUnit Ġ{ Ċ Ġ* ĠĠĠĠ Ġreturn ĠUnit ÂłĊ Ġ* Ġ} Ċ Ġ* Ġfun Ġfoo () Ġ= ĠUnit Ċ Ġ* Ċ Ġ* Ġfun Ġdoes Nothing () Ġ{ Ċ Ġ* ĠĠĠĠ ĠUnit Ċ Ġ* Ġ} Ċ Ġ* Ġ</ non comp liant > Ċ Ġ* Ċ Ġ* Ġ< comp liant > Ċ Ġ* Ġfun Ġfoo () Ġ{ Âł } Ċ Ġ* Ċ Ġ* Ġ// Ġoverridden Ġno - op Ġfunctions Ġare Ġallowed Ċ Ġ* Ġoverride Ġfun Ġfoo () Ġ= ĠUnit Ċ Ġ* Ġ</ comp liant > Ċ Ġ*/ Ċ class ĠOptional Unit ( config : ĠConfig Ġ= ĠConfig . empty ) Ġ: ĠRule ( config ) Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġissue Ġ= ĠIssue ( ĊĠĠĠĠĠĠĠ Ġjava Class . simple Name , ĊĠĠĠĠĠĠĠ ĠSeverity . Style , ĊĠĠĠĠĠĠĠ Ġ" Return Ġtype Ġof Ġ' Unit ' Ġis Ġunnecessary Ġand Ġcan Ġbe Ġsafely Ġremoved .", ĊĠĠĠĠĠĠĠ ĠDeb t . FI VE _ MIN S ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Named Function ( function : ĠK t Named Function ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( function . has Declared ReturnType ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Function With Explicit ReturnType ( function ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! function . is Override ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Function With In ferred ReturnType ( function ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . visit Named Function ( function ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Block Expression ( expression : ĠK t Block Expression ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatements Ġ= Ġexpression . statements ĊĠĠĠĠĠĠĠ Ġval Ġlast Statement Ġ= Ġstatements . last OrNull () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġstatements ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ! is ĠK t Name Reference Expression Ġ|| Ġit . text Ġ!= ĠUNIT Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ!= Ġlast Statement Ġ|| Ġbinding Context Ġ== ĠBinding Context . EMPTY Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! it . is Used As Expression ( binding Context ) Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . siblings ( forward Ġ= Ġfalse , Ġwith It self Ġ= Ġfalse ). first Is Instance OrNull < Kt Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev ?. getType ( binding Context )?. is Unit () Ġ== Ġtrue Ġ&& Ġprev . can Be Used As Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCode S mell ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEntity . from ( expression ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" A Ġsingle ĠUnit Ġexpression Ġis Ġunnecessary Ġand Ġcan Ġsafely Ġbe Ġremoved " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . visit Block Expression ( expression ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠK t Expression . can Be Used As Value (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t If Expression Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelse Expression Ġ= Ġ` else ` ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( else Expression Ġis ĠK t If Expression ) Ġelse Expression . can Be Used As Value () Ġelse Ġelse Expression Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t When Expression Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . last OrNull ()?. else Keyword Ġ!= Ġnull Ġ|| ĠWhen Checker . get Missing Cases ( this , Ġbinding Context ). isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Function With Explicit ReturnType ( function : ĠK t Named Function ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Reference Ġ= Ġfunction . type Reference ĊĠĠĠĠĠĠĠ Ġval Ġtype Element Text Ġ= Ġtype Reference ?. type Element ?. text ĊĠĠĠĠĠĠĠ Ġif Ġ( type Element Text Ġ== ĠUNIT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function . initializer . is Nothing Type ()) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( Code S mell ( issue , ĠEntity . from ( type Reference ), Ġcreate Message ( function ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Function With In ferred ReturnType ( function : ĠK t Named Function ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreference Expression Ġ= Ġfunction . body Expression Ġas ? ĠK t Name Reference Expression ĊĠĠĠĠĠĠĠ Ġif Ġ( reference Expression Ġ!= Ġnull Ġ&& Ġreference Expression . text Ġ== ĠUNIT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( Code S mell ( issue , ĠEntity . from ( reference Expression ), Ġcreate Message ( function ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Message ( function : ĠK t Named Function ) Ġ= Ġ" The Ġfunction Ġ${ function . name } Ġ" Ġ+ ĊĠĠĠĠĠĠĠ Ġ" defines Ġa Ġreturn Ġtype Ġof ĠUnit . ĠThis Ġis Ġunnecessary Ġand Ġcan Ġsafely Ġbe Ġremoved ." ĊĊĠĠĠ Ġprivate Ġfun ĠK t Expression ?. is Nothing Type () Ġ= ĊĠĠĠĠĠĠĠ Ġbinding Context Ġ!= ĠBinding Context . EMPTY Ġ&& Ġthis ?. getType ( binding Context )?. is Nothing () Ġ== Ġtrue ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠUNIT Ġ= Ġ" Unit " ĊĠĠĠ Ġ} Ċ } Ċ