/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* Ġ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 . py . inline . clean Ċ Ċ import Ġorg . jetbrains . kotlin . js . backend . ast . Js Block Ċ import Ġorg . jetbrains . kotlin . js . backend . ast . Js Invocation Ċ import Ġorg . jetbrains . kotlin . js . backend . ast . Js Name Ref Ċ import Ġorg . jetbrains . kotlin . js . backend . ast . Recursive Js Visitor Ċ import Ġorg . jetbrains . kotlin . js . backend . ast . metadata . is Js Call Ċ import Ġorg . jetbrains . kotlin . py . inline . util . is Call Invocation Ċ Ċ // ĠRe places Ġa . foo . call ( a , Ġb ) Ġwith Ġa . foo ( b ) Ċ class ĠRed undant Call Elimin ation ( private Ġval Ġroot : ĠJs Block ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġchanged Ġ= Ġfalse ĊĊĠĠĠ Ġfun Ġapply (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġroot . accept ( object Ġ: ĠRecursive Js Visitor () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Invocation ( invocation : ĠJs Invocation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Elimin ate ( invocation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . visit Invocation ( invocation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġtry Elimin ate ( invocation : ĠJs Invocation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Call Invocation ( invocation )) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġinvocation . qual ifier Ġas ? ĠJs Name Ref Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! call . is Js Call ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqualifier Ġ= Ġcall . qual ifier Ġas ? ĠJs Name Ref Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceiver Ġ= Ġqualifier . qual ifier Ġas ? ĠJs Name Ref Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Arg Ġ= Ġinvocation . arguments . first OrNull () Ġas ? ĠJs Name Ref Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( receiver . qual ifier Ġ== Ġnull Ġ&& Ġreceiver . name Ġ!= Ġnull Ġ&& Ġfirst Arg . qual ifier Ġ== Ġnull Ġ&& Ġreceiver . name Ġ== Ġfirst Arg . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvocation . arguments . remove At ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvocation . qual ifier Ġ= Ġqualifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanged Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġchanged ĊĠĠĠ Ġ} Ċ } Ċ