/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 Ġ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 . idea . core . formatter Ċ Ċ import Ġcom . intellij . openapi . util . Invalid DataException Ċ import Ġorg . j dom . Element Ċ Ċ class ĠKotlin Package Entry Table ( private Ġval Ġentries : ĠMutable List < Kotlin Package Entry >) Ġ: ĊĠĠĠ Ġcom . intellij . openapi . util . J DOM External izable , ĠClone able Ġ{ ĊĠĠĠ Ġconstructor () Ġ: Ġthis ( mutable ListOf ()) ĊĊĠĠĠ Ġval Ġentry Count : ĠInt Ġget () Ġ= Ġentries . size ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġclone (): ĠKotlin Package Entry Table Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclone Ġ= ĠKotlin Package Entry Table () ĊĠĠĠĠĠĠĠ Ġclone . copyFrom ( this ) ĊĠĠĠĠĠĠĠ Ġreturn Ġclone ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcopy From ( package Table : ĠKotlin Package Entry Table ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentries . clear () ĊĠĠĠĠĠĠĠ Ġentries . addAll ( package Table . entries ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Entries (): ĠArray < Kotlin Package Entry > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġentries . to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert Entry At ( entry : ĠKotlin Package Entry , Ġindex : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentries . add ( index , Ġentry ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Entry At ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentries . remove At ( index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Entry At ( index : ĠInt ): ĠKotlin Package Entry Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġentries [ index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Entry At ( entry : ĠKotlin Package Entry , Ġindex : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentries [ index ] Ġ= Ġentry ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġcontains ( packageName : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġentries . any Ġ{ Ġ! it . is Special Ġ&& Ġit . matches PackageName ( packageName ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Empty Packages () Ġ{ ĊĠĠĠĠĠĠĠ Ġentries . removeAll Ġ{ Ġit . packageName . isBlank () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Entry ( entry : ĠKotlin Package Entry ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentries . add ( entry ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread External ( element : ĠElement ) Ġ{ ĊĠĠĠĠĠĠĠ Ġentries . clear () ĊĊĠĠĠĠĠĠĠ Ġelement . children . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . name Ġ== Ġ" package ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpackageName Ġ= Ġit . getAttribute Value (" name ") Ġ?: Ġthrow ĠInvalid DataException () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalias Ġ= Ġit . getAttribute Value (" alias ") ?. to Boolean () Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwith Sub packages Ġ= Ġit . getAttribute Value (" with Sub packages ") ?. to Boolean () Ġ?: Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName . isEmpty () Ġ&& Ġ! alias Ġ-> ĠKotlin Package Entry . ALL _ OTHER _ IMPORT S _ ENTRY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpackageName . isEmpty () Ġ&& Ġalias Ġ-> ĠKotlin Package Entry . ALL _ OTHER _ ALIAS _ IMPORT S _ ENTRY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠKotlin Package Entry ( packageName , Ġwith Sub packages ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . add ( entry ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrite External ( parentNode : ĠElement ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( entry Ġin Ġentries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= ĠElement (" package ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Node . add Content ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġif Ġ( entry . is Special ) Ġ"" Ġelse Ġentry . packageName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalias Ġ= Ġ( entry Ġ== ĠKotlin Package Entry . ALL _ OTHER _ ALIAS _ IMPORT S _ ENTRY ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . setAttribute (" name ", Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . setAttribute (" alias ", Ġalias . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . setAttribute (" with Sub packages ", Ġentry . with Sub packages . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠKotlin Package Entry Table ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( entry Count Ġ!= Ġother . entry Count ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġentries . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entries [ i ] Ġ!= Ġother . entries [ i ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= Ġentries . first OrNull ()?. hashCode () Ġ?: Ġ 0 Ċ } Ċ