/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 5 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* Ġ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 . jetbrains . kotlin . idea . ins pe ctions Ċ Ċ import Ġcom . intellij . code Insight . int ention . Int ention Action Ċ import Ġcom . intellij . code Inspection .* Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . openapi . progress . Process Canceled Exception Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġorg . jetbrains . kotlin . diagnostics . Diagnostic Ċ import Ġorg . jetbrains . kotlin . diagnostics . Errors Ċ import Ġorg . jetbrains . kotlin . diagnostics . rendering . Default Error Messages Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . analyze Fully AndGet Result Ċ import Ġorg . jetbrains . kotlin . idea . highlighter . Jet Psi Checker Ċ import Ġorg . jetbrains . kotlin . idea . quick fix . Cleanup Fix Ċ import Ġorg . jetbrains . kotlin . idea . quick fix . Replace Obsolete Label Syntax Fix Ċ import Ġorg . jetbrains . kotlin . idea . util . Project Roots Util Ċ import Ġorg . jetbrains . kotlin . psi . Jet Annotation Entry Ċ import Ġorg . jetbrains . kotlin . psi . Jet File Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . forEach Desc endant OfType Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Non Strict Parent OfType Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . parents Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . parent sWith Self Ċ import Ġorg . jetbrains . kotlin . resolve . jvm . diagnostics . Errors Jvm Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ public Ġclass ĠKotlin Cleanup Inspection (): ĠLocal Inspection Tool (), ĠCleanup Local Inspection Tool Ġ{ ĊĠĠĠ Ġ// Ġrequired Ġto Ġsimplify Ġthe Ġinspection Ġregistration Ġin Ġtests ĊĠĠĠ Ġoverride Ġfun Ġget DisplayName (): ĠString Ġ= Ġ" Usage Ġof Ġredundant Ġor Ġdeprecated Ġsyntax Ġor Ġdeprecated Ġsymbols " ĊĊĠĠĠ Ġoverride Ġfun Ġcheck File ( file : ĠPsi File , Ġmanager : ĠIns pection Manager , Ġis On The Fly : ĠBoolean ): ĠArray < out ĠProblem Descriptor >? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is On The Fly Ġ|| Ġfile Ġ! is ĠJet File Ġ|| Ġ! Project Roots Util . isIn Project Source ( file )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġanalysis Result Ġ= Ġfile . analyze Fully AndGet Result () ĊĠĠĠĠĠĠĠ Ġif Ġ( analysis Result . isError ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠProcess Canceled Exception ( analysis Result . error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdiagnostics Ġ= Ġanalysis Result . binding Context . get Diagnostics () ĊĊĠĠĠĠĠĠĠ Ġclass ĠProblem Data ( val Ġproblem Descriptor : ĠProblem Descriptor , Ġelement ToBe Invalid ated : ĠPsi Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdepth Ġ= Ġelement ToBe Invalid ated . parent sWith Self . take While Ġ{ Ġit Ġ! is ĠPsi File Ġ}. count () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġproblems Ġ= Ġarray ListOf < Problem Data >() ĊĠĠĠĠĠĠĠ Ġfile . forEach Desc endant OfType < Psi Element > Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( diagnostic Ġin Ġdiagnostics . for Element ( element )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( diagnostic . is Cleanup ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfixes Ġ= Ġdiagnostic . to Cleanup Fixes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fixes . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproblem Descriptor Ġ= Ġdiagnostic . to Problem Descriptor ( fixes , Ġfile , Ġmanager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : Ġnot Ġquite Ġcorrect Ġfor Ġmultiple ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement ToBe Invalid ated Ġ= Ġfixes . map Ġ{ Ġit . element ToBe Invalid ated () Ġ}. filter NotNull (). first OrNull () Ġ?: Ġelement ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproblems . add ( Problem Data ( problem Descriptor , Ġelement ToBe Invalid ated )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġproblems . sortBy Ġ{ Ġit . depth Ġ}. map Ġ{ Ġit . problem Descriptor Ġ}. to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDiagnostic . is Cleanup () Ġ= Ġget Factory () Ġin Ġcleanup Diagnostics Factories Ġ|| Ġis Obsolete Label () ĊĊĠĠĠ Ġprivate Ġval Ġcleanup Diagnostics Factories Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . DEPRECATED _ TRA IT _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . ENUM _ ENTRY _ USE S _ DEPRECATED _ OR _ NO _ DE LIMITER , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . ENUM _ ENTRY _ USE S _ DEPRECATED _ SUPER _ CON STRUCTOR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . DEPRECATED _ L AMBDA _ SY NTAX , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . MISSING _ CON STRUCTOR _ KEYWORD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . FUNCTION _ EXPRESSION _ WITH _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . UN NE C ESS ARY _ NOT _ NULL _ ASSERT ION , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . UN NE C ESS ARY _ SAFE _ CALL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . USE LESS _ CAST , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . USE LESS _ EL VIS , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠErrors Jvm . POSITION ED _ VALUE _ ARGUMENT _ FOR _ JAVA _ AN NOT ATION , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . DEPRECATED _ SYMBOL _ WITH _ MESSAGE ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun ĠDiagnostic . is Obsolete Label (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġannotation Entry Ġ= Ġget Psi Element (). get Non Strict Parent OfType < Jet Annotation Entry >() Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn ĠReplace Obsolete Label Syntax Fix . look s Like Obsolete Label ( annotation Entry ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDiagnostic . to Cleanup Fixes (): ĠCollection < Cleanup Fix > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJet Psi Checker . create Quick fixes ( this ). filter Is Instance < Cleanup Fix >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠWrapper ( val Ġintention : ĠInt ention Action , Ġfile : ĠJet File ) Ġ: ĠInt ention Wrapper ( int ention , Ġfile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( project : ĠProject , Ġeditor : ĠEditor ?, Ġfile : ĠPsi File ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( int ention . is Available ( project , Ġeditor , Ġfile )) Ġ{ Ġ// Ġwe Ġshould Ġcheck Ġis Available Ġhere Ġbecause Ġsome Ġelements Ġmay Ġget Ġinvalid ated Ġ( or Ġother Ġconditions Ġmay Ġchange ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . invoke ( project , Ġeditor , Ġfile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDiagnostic . to Problem Descriptor ( fixes : ĠCollection < Cleanup Fix >, Ġfile : ĠJet File , Ġmanager : ĠIns pection Manager ): ĠProblem Descriptor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmanager . create Problem Descriptor ( get Psi Element (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Error Messages . render ( this ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfixes . map Ġ{ ĠWrapper ( it , Ġfile ) Ġ}. to Typed Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProblem Highlight Type . GENERIC _ ERROR _ OR _ WARNING ) ĊĠĠĠ Ġ} Ċ } Ċ