/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 8 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ċ Ġ* Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . idea . ins pe ctions Ċ Ċ import Ġcom . intellij . code Inspection . Local Quick Fix Ċ import Ġcom . intellij . code Inspection . Problem Descriptor Ċ import Ġcom . intellij . code Inspection . Problem Highlight Type Ċ import Ġcom . intellij . code Inspection . Problems Holder Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi . Psi Element Visitor Ċ import Ġorg . jetbrains . kotlin . diagnostics . Errors Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . analyze Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Strict Parent OfType Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . Body Resolve Mode Ċ Ċ class ĠSafe Cast With Return Inspection Ġ: ĠAbstract Kotlin Inspection () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġbuild Visitor ( holder : ĠPro blems Holder , Ġis On The Fly : ĠBoolean ): ĠPsi Element Visitor Ġ= ĊĠĠĠĠĠĠĠ Ġbinary WithType RHS Expression Visitor ( fun ( expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expression . right Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expression . operation Reference . get Referenced Name () Ġ!= Ġ" as ?") Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġexpression . get Strict Parent OfType < Kt Binary Expression >() Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Kt Psi Util . de parent hesize ( parent . left ) Ġ!= Ġexpression ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent . operation Reference . get Referenced Name () Ġ!= Ġ" ?: ") Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Kt Psi Util . de parent hesize ( parent . right ) Ġ! is ĠK t Return Expression ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġexpression . analyze ( Body Resolve Mode . PAR TIAL _ WITH _ DIAG NO ST ICS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context [ Binding Context . USED _ AS _ EXPRESSION , Ġparent ] Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlambda Ġ= Ġexpression . get Strict Parent OfType < Kt Lambda Expression >() Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lambda . function Literal . body Expression ?. statements ?. last OrNull () Ġ!= Ġparent ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġlambda . get Strict Parent OfType < Kt Call Expression >() Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context [ Binding Context . USED _ AS _ EXPRESSION , Ġcall ] Ġ== Ġtrue ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . diagnostics . for Element ( expression . operation Reference ). any Ġ{ Ġit . factory Ġ== ĠErrors . CAST _ NE VER _ SU CCE ED S Ġ}) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . register Problem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Should Ġbe Ġreplaced Ġwith Ġ' if ' Ġtype Ġcheck ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProblem Highlight Type . GENERIC _ ERROR _ OR _ WARNING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReplace With If Fix () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}) Ċ } Ċ Ċ private Ġclass ĠReplace With If Fix Ġ: ĠLocal Quick Fix Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠgetName () Ġ= Ġ" Replace Ġwith Ġ' if ' Ġtype Ġcheck " ĊĊĠĠĠ Ġoverride Ġfun Ġget Family Name () Ġ= Ġname ĊĊĠĠĠ Ġoverride Ġfun Ġapply Fix ( project : ĠProject , Ġdescriptor : ĠProblem Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġel vis Expression Ġ= Ġdescriptor . psi Element Ġas ? ĠK t Binary Expression Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġreturn Expression Ġ= ĠK t Psi Util . de parent hesize ( el vis Expression . right ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġsafe Cast Expression Ġ= ĠK t Psi Util . de parent hesize ( el vis Expression . left ) Ġas ? ĠK t Binary Expression WithType RHS Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġtype Reference Ġ= Ġsafe Cast Expression . right Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġel vis Expression . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK t Psi Factory ( el vis Expression ). create Expression By Pattern ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" if Ġ($ 0 Ġ! is Ġ$ 1 ) Ġ$ 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsafe Cast Expression . left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Reference , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Expression ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }