package Ġorg . jetbrains . research . kotlin codes mell detector . core . distance Ċ Ċ import Ġcom . intellij . psi . Smart Psi Element Pointer Ċ import Ġorg . jetbrains . kotlin . psi . Kt Element Ċ import Ġorg . jetbrains . kotlin . psi . Kt Named Declaration Ċ import Ġorg . jetbrains . research . kotlin codes mell detector . utils . Topic Finder Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . HashSet Ċ import Ġjava . util . Tree Set Ċ Ċ class ĠExtract ed Concept ( ĊĠĠĠ Ġprivate Ġval Ġconcept Entities : ĠSet < Smart Psi Element Pointer < out ĠK t Element >> Ċ ) Ġ: ĊĠĠĠ ĠComparable < Extract ed Concept ?> Ġ{ ĊĊĠĠĠ Ġval Ġconcept Clusters : ĠMutable Set < Extract Class Candidate Ref actor ing > Ġ= ĠHashSet () ĊĊĠĠĠ Ġvar Ġtopics : ĠList < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġfun Ġadd Concept Cluster ( candidate : ĠExtract Class Candidate Ref actor ing ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconcept Clusters . add ( candidate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Topics () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Elements Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( entity Ġin Ġconcept Entities ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entity . element Ġis ĠK t Named Declaration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Elements . add ( entity . element ?. name Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtopics Ġ= ĠTopic Finder . find Topics ( code Elements ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġoperator Ġfun Ġcompare To ( other : ĠExtract ed Concept ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġthis Set Ġ= ĠTree Set ( concept Clusters ) ĊĠĠĠĠĠĠĠ Ġval Ġother Set Ġ= ĠTree Set ( other . concept Clusters ) ĊĊĠĠĠĠĠĠĠ Ġval Ġthis First Ġ= Ġthis Set . first () ĊĠĠĠĠĠĠĠ Ġval Ġother First Ġ= Ġother Set . first () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis First . compareTo ( other First ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtopics . toString () ĊĠĠĠ Ġ} Ċ }