package Ġio . gitlab . art urb os ch . de te kt . rules . bugs Ċ Ċ 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 Ġorg . jetbrains . kotlin . psi . Kt Call Expression Ċ import Ġorg . jetbrains . kotlin . psi . Kt Class Or Object Ċ import Ġorg . jetbrains . kotlin . psi . Kt Named Declaration Ċ import Ġorg . jetbrains . kotlin . psi . Kt Throw Expression Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . any Desc endant OfType Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . find Function ByName Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Super Names Ċ Ċ /** Ċ Ġ* ĠReports Ġimplementations Ġof Ġthe Ġ` Iterator ` Ġinterface Ġwhich Ġdo Ġnot Ġthrow Ġa ĠNoSuch ElementException Ġin Ġthe Ċ Ġ* Ġimplementation Ġof Ġthe Ġnext () Ġmethod . ĠWhen Ġthere Ġare Ġno Ġmore Ġelements Ġto Ġreturn Ġan ĠIterator Ġshould Ġthrow Ġa Ċ Ġ* ĠNoSuch ElementException . Ċ Ġ* Ċ Ġ* ĠSee : Ġhttps :// docs . oracle . com / javase / 7 / docs / api / java / util / Iterator . html # next () Ċ Ġ* Ċ Ġ* Ġ< non comp liant > Ċ Ġ* Ġclass ĠMy Iterator Ġ: ĠIterator < String > Ġ{ Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġoverride Ġfun Ġnext (): ĠString Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġreturn Ġ"" Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ġ</ non comp liant > Ċ Ġ* Ċ Ġ* Ġ< comp liant > Ċ Ġ* Ġclass ĠMy Iterator Ġ: ĠIterator < String > Ġ{ Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġoverride Ġfun Ġnext (): ĠString Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġif Ġ(! this . hasNext ()) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNoSuch ElementException () Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ// Ġ... Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ġ</ comp liant > Ċ Ġ* Ċ Ġ* Ġ@ active Ġsince Ġv 1 . 2 . 0 Ċ Ġ*/ Ċ class ĠIterator Not Throw ing NoSuch ElementException ( config : ĠConfig Ġ= ĠConfig . empty ) Ġ: ĠRule ( config ) Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġissue Ġ= ĠIssue (" Iterator Not Throw ing NoSuch ElementException ", ĠSeverity . Defect , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġnext () Ġmethod Ġof Ġan ĠIterator Ġimplementation Ġshould Ġthrow Ġa ĠNoSuch ElementException Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" when Ġthere Ġare Ġno Ġmore Ġelements Ġto Ġreturn ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDeb t . TEN _ MIN S ) ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Class Or Object ( class Or Object : ĠK t Class Or Object ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( class Or Object . get Super Names (). contains (" Iterator ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Method Ġ= Ġclass Or Object . find Function ByName (" next ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Method Ġ!= Ġnull Ġ&& Ġ! next Method . throws NoSuch ElementException Thrown ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( Code S mell ( issue , ĠEntity . from ( class Or Object ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" This Ġimplementation Ġof ĠIterator Ġdoes Ġnot Ġcorrectly Ġimplement Ġthe Ġnext () Ġmethod Ġas Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" it Ġdoesn 't Ġthrow Ġa ĠNoSuch ElementException Ġwhen Ġno Ġelements Ġremain Ġin Ġthe ĠIterator .")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . visit Class Or Object ( class Or Object ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠK t Named Declaration . throws NoSuch ElementException Thrown () Ġ= ĊĠĠĠĠĠĠĠ Ġany Desc endant OfType < Kt Throw Expression > Ġ{ Ġis NoSuch Element Expression ( it ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis NoSuch Element Expression ( expression : ĠK t Throw Expression ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcal lee Expression Ġ= Ġ( expression . throw n Expression Ġas ? ĠK t Call Expression )?. callee Expression ĊĠĠĠĠĠĠĠ Ġreturn Ġcal lee Expression ?. text Ġ== Ġ" NoSuch ElementException " ĊĠĠĠ Ġ} Ċ } Ċ