/* Ċ Ġ* Ġ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 .* Ċ import Ġorg . jetbrains . kotlin . py . inline . util . get Import Tag Ċ import Ġorg . jetbrains . kotlin . py . inline . util . replace Names Ċ Ċ fun Ġremove Duplicate Imports ( node : ĠJs Node ) Ġ{ ĊĠĠĠ Ġnode . accept ( object Ġ: ĠRecursive Js Visitor () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Block ( x : ĠJs Block ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . visit Block ( x ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Duplicate Imports ( x . statements ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) Ċ } Ċ Ċ private Ġfun Ġremove Duplicate Imports ( statements : ĠMutable List < Js Statement >) Ġ{ ĊĠĠĠ Ġval Ġexisting Imports Ġ= Ġmutable Map Of < String , ĠJs Name >() ĊĠĠĠ Ġval Ġreplacement s Ġ= Ġmutable Map Of < Js Name , ĠJs Expression >() ĊĠĠĠ Ġremove Duplicate Imports ( statements , Ġexisting Imports , Ġreplacement s ) ĊĊĠĠĠ Ġfor Ġ( statement Ġin Ġstatements ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreplace Names ( statement , Ġreplacement s ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġremove Duplicate Imports ( ĊĠĠĠ Ġstatements : ĠMutable List < Js Statement >, ĊĠĠĠ Ġexisting Imports : ĠMutable Map < String , ĠJs Name >, ĊĠĠĠ Ġreplacement s : ĠMutable Map < Js Name , ĠJs Expression > Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠ Ġwhile Ġ( index Ġ< Ġstatements . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatement Ġ= Ġstatements [ index ] ĊĠĠĠĠĠĠĠ Ġif Ġ( statement Ġis ĠJs Vars ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimport Tag Ġ= Ġget Import Tag ( statement ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( import Tag Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġstatement . vars [ 0 ]. name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexisting Name Ġ= Ġexisting Imports [ import Tag ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( existing Name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreplacement s [ name ] Ġ= Ġexisting Name . make Ref () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatements . remove At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexisting Imports [ import Tag ] Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( statement Ġis ĠJs Block ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Duplicate Imports ( statement . statements , Ġexisting Imports , Ġreplacement s ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠ Ġ} Ċ } Ċ