package Ġmain . kotlin . util . collector Ċ // Ġ Ë ħ Ċ import Ġcom . change _ vision . j ude . api . inf . Ast ah API Ċ import Ġcom . change _ vision . j ude . api . inf . model . IN amed Element Ċ import Ġcom . change _ vision . j ude . api . inf . model . IP ackage Ċ import Ġcom . change _ vision . j ude . api . inf . model . I Association Ċ import Ġcom . change _ vision . j ude . api . inf . model . IC lass Ċ import Ġcom . change _ vision . j ude . api . inf . model . I Attribute Ċ import Ġjava . util . Linked HashSet Ċ // Ġ Ë Ħ Ċ Ċ // ĠCollect Ġthe Ġselected Ġassociations Ġin Ġthe Ġstructure Ġtree Ġrecursively . Ċ class ĠAssociation Collector Ġ{ ĊĠĠĠ Ġ// Ġ Ë ħ ĊĠĠĠĠĊĠĠĠ Ġ// Ġ Ë Ħ ĊĊĠĠĠ Ġ// ĠCollect Ġthe Ġselected Ġassociations Ġin Ġthe Ġstructure Ġtree Ġrecursively . ĊĠĠĠ Ġfun Ġcollect From Selected Elements (): ĠList < I Association > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ Ë ħ ĊĠĠĠĠĠĠĠ Ġval Ġselected Entities Ġ= Ġjava . util . Arrays . asList (* Ast ah API . get Ast ah API (). view Manager . project View Manager . selected Entities ) ĊĠĠĠĠĠĠĠ Ġprintln (" Selected Ġentities Ġ: ". plus ( selected Entities . toString ())) ĊĊĠĠĠĠĠĠĠ Ġval Ġassociation Set Ġ= ĠLinked HashSet < I Association >() Ġ Ġ// ĠNotice : ĠNot Ġallow Ġduplication ĊĊĠĠĠĠĠĠĠ Ġ// ĠCollect Ġassociations Ġfrom Ġthe Ġselected Ġentities Ġrecursively ĊĠĠĠĠĠĠĠ Ġselected Entities . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠI Named Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassociation Set . addAll ( collect Re cursively ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprintln (" Collected Ġassociations Ġ: ". plus ( association Set . toString ())) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠArrayList < I Association >( association Set ) ĊĠĠĠĠĠĠĠ Ġ// Ġ Ë Ħ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCollect Ġassociations Ġrecursively . ĊĠĠĠ Ġprivate Ġfun Ġcollect Re cursively ( element : ĠI Named Element ): ĠList < I Association > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ Ë ħ ĊĠĠĠĠĠĠĠ Ġval Ġassociation List Ġ= ĠArrayList < I Association >() ĊĊĠĠĠĠĠĠĠ Ġif Ġ( element Ġis ĠI Package ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġall Ġassociations Ġfrom Ġthe Ġpackage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . owned Elements . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassociation List . addAll ( collect Re cursively ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( element Ġis ĠI Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġall Ġassociations Ġfrom Ġthe Ġclass ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . attributes . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassociation List . addAll ( collect Re cursively ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġall Ġassociations Ġfrom Ġthe Ġnested Ġclasses ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . nested Classes . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassociation List . addAll ( collect Re cursively ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( element Ġis ĠI Attribute ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġass o Ġ= Ġelement . association ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( asso Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġattribute , Ġdo Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġassociation , Ġadd Ġassociation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( member End Ġin Ġass o . member End s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( member End Ġ=== Ġelement Ġ&& Ġmember End . navig ability Ġ== Ġ" Navig able ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġvalid Ġassociation Ġend ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassociation List . add ( asso ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠArrayList < I Association >( Linked HashSet < I Association >( association List )) Ġ Ġ// ĠDelete Ġduplicates ĊĠĠĠĠĠĠĠ Ġ// Ġ Ë Ħ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ Ë ħ ĊĠĠĠĠĊĠĠĠ Ġ// Ġ Ë Ħ Ċ } Ċ Ċ // Ġ Ë ħ Ċ Ċ // Ġ Ë Ħ Ċ