// ĠCopyright Ġ 2 0 0 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ċ package Ġorg . jetbrains . kotlin . idea . quick fix Ċ Ċ import Ġcom . intellij . code Insight . int ention . High Priority Action Ċ import Ġcom . intellij . code Insight . int ention . Int ention Action Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġorg . jetbrains . kotlin . diagnostics . Diagnostic Ċ import Ġorg . jetbrains . kotlin . diagnostics . Errors Ċ import Ġorg . jetbrains . kotlin . idea . Kotlin Bundle Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . analyze Ċ import Ġorg . jetbrains . kotlin . idea . intent ions . br an ched Transform ations . is Stable Simple Expression Ċ import Ġorg . jetbrains . kotlin . lexer . Kt Tokens Ċ import Ġorg . jetbrains . kotlin . idea . references . main Reference Ċ import Ġorg . jetbrains . kotlin . idea . references . resolve To Descriptors Ċ import Ġorg . jetbrains . kotlin . idea . util . get Resolution Scope Ċ import Ġorg . jetbrains . kotlin . incremental . components . No Lookup Location Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . create Smart Pointer Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . getLast Parent OfType In Row Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . getParent OfType Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . getParent Of Types And Predicate Ċ import Ġorg . jetbrains . kotlin . resolve . binding Context Util . is Used As Expression Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . Body Resolve Mode Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . utils . find Variable Ċ import Ġorg . jetbrains . kotlin . types . type Util . isNull ability Mismatch Ċ Ċ class ĠSur round With Null Check Fix ( ĊĠĠĠ Ġexpression : ĠK t Expression , ĊĠĠĠ Ġnullable Expression : ĠK t Expression Ċ ) Ġ: ĠKotlin Quick Fix Action < Kt Expression >( expression ), ĠHigh Priority Action Ġ{ ĊĠĠĠ Ġprivate Ġval Ġnullable Expression Pointer Ġ= Ġnullable Expression . create Smart Pointer () ĊĊĠĠĠ Ġoverride Ġfun Ġget Family Name () Ġ= Ġtext ĊĊĠĠĠ Ġoverride Ġfun ĠgetText () Ġ= ĠKotlin Bundle . message (" sur round . with . null . check ") ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( project : ĠProject , Ġeditor : ĠEditor ?, Ġfile : ĠK t File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġelement Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġnullable Expression Ġ= Ġnullable Expression Pointer . element Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= ĠK t Psi Factory ( element ) ĊĠĠĠĠĠĠĠ Ġval Ġsur rounded Ġ= Ġfactory . create Expression By Pattern (" if Ġ($ 0 Ġ!= Ġnull ) Ġ{ Ġ$ 1 Ġ} ", Ġnullable Expression , Ġelement ) ĊĠĠĠĠĠĠĠ Ġelement . replace ( sur rounded ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠKotlin Single Int ention Action Factory () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠK t Expression . has Accept able Parent () Ġ= Ġwith ( parent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġis ĠK t Block Expression Ġ|| Ġthis . parent Ġis ĠK t If Expression Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġis ĠK t When Entry Ġ|| Ġthis . parent Ġis ĠK t Loop Expression ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Action ( diagnostic : ĠDiagnostic ): ĠInt ention Action ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġdiagnostic . psi Element ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpression Parent Ġ= Ġelement . getParent OfType < Kt Expression >( strict Ġ= Ġelement Ġis ĠK t Operation Reference Expression ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġexpression Parent . analyze ( Body Resolve Mode . PAR TIAL _ WITH _ C FA ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġelement . parent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnullable Expression Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( parent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Dot Qualified Expression Ġ-> Ġparent . receiver Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Binary Expression Ġ-> Ġif Ġ( parent . operation Token Ġ== ĠK t Tokens . IN _ KEYWORD ) Ġparent . right Ġelse Ġparent . left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Call Expression Ġ-> Ġparent . callee Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġas ? ĠK t Reference Expression Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! nullable Expression . is Stable Simple Expression ( context )) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpression Target Ġ= Ġexpression Parent . getParent Of Types And Predicate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstrict Ġ= Ġfalse , Ġparent Classes Ġ= ĠarrayOf ( Kt Expression :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! it . is Used As Expression ( context ) Ġ&& Ġit . has Accept able Parent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSur round Ġdeclaration Ġ( even Ġof Ġlocal Ġvariable ) Ġwith Ġnull Ġcheck Ġis Ġgenerally Ġa Ġbad Ġidea ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expression Target Ġis ĠK t Declaration ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeclaration Ġ= Ġnullable Expression . main Reference . resolve To Descriptors ( context ). single OrNull () Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariable Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Target . get Resolution Scope ( context )?. find Variable ( declaration . name , ĠNo Lookup Location . FROM _ IDE ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( declaration Ġ!= Ġvariable ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSur round With Null Check Fix ( expression Target , Ġnullable Expression ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠIterator On Nullable Factory Ġ: ĠKotlin Single Int ention Action Factory () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Action ( diagnostic : ĠDiagnostic ): ĠInt ention Action ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnullable Expression Ġ= Ġdiagnostic . psi Element Ġas ? ĠK t Reference Expression Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfor Expression Ġ= Ġnullable Expression . parent . parent Ġas ? ĠK t For Expression Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( for Expression . parent Ġ! is ĠK t Block Expression ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! nullable Expression . is Stable Simple Expression ()) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSur round With Null Check Fix ( for Expression , Ġnullable Expression ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠType Mismatch Factory Ġ: ĠKotlin Single Int ention Action Factory () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Action ( diagnostic : ĠDiagnostic ): ĠInt ention Action ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Mismatch Ġ= ĠErrors . TYPE _ MIS MATCH . cast ( diagnostic ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnullable Expression Ġ= Ġtype Mismatch . psi Element Ġas ? ĠK t Reference Expression Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġwhen Ġ( val Ġparent Ġ= Ġnullable Expression . parent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Value Argument Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġparent . getParent OfType < Kt Call Expression >( true ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . getLast Parent OfType In Row < Kt Qualified Expression >() Ġ?: Ġcall ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t Binary Expression Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent . right Ġ!= Ġnullable Expression ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( root . parent Ġ! is ĠK t Block Expression ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isNull ability Mismatch ( expected Ġ= Ġtype Mismatch . a , Ġactual Ġ= Ġtype Mismatch . b )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! nullable Expression . is Stable Simple Expression ()) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSur round With Null Check Fix ( root , Ġnullable Expression ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ