/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 1 7 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġorg . intellij . plugins . h cl . terraform . config . inspection Ċ Ċ import Ġcom . intellij . code Inspection . Local Quick Fix Ċ import Ġcom . intellij . code Inspection . Problem Highlight Type Ċ import Ġcom . intellij . code Inspection . Problems Holder Ċ import Ġcom . intellij . psi . Psi Element Visitor Ċ import Ġorg . intellij . plugins . h cl . navigation . H CL QualifiedName Provider Ċ import Ġorg . intellij . plugins . h cl . psi . H CL Block Ċ import Ġorg . intellij . plugins . h cl . psi . H CLE lement Visitor Ċ import Ġorg . intellij . plugins . h cl . psi . H CL Property Ċ import Ġorg . intellij . plugins . h cl . terraform . config . code insight . Model Helper Ċ import Ġorg . intellij . plugins . h cl . terraform . config . model . PropertyType Ċ Ċ // ĠTODO : ĠSupport Ġoverrides Ġin Ġseparate Ġfiles Ċ class ĠT FD uplicated Block Property Inspection Ġ: ĠT FD uplicated Inspection Base () Ġ{ ĊĊĠ Ġoverride Ġfun Ġcreate Visitor ( holder : ĠPro blems Holder ): ĠPsi Element Visitor Ġ{ ĊĠĠĠ Ġreturn ĠMy EV ( holder ) ĊĠ Ġ} ĊĊĊĠ Ġinner Ġclass ĠMy EV ( val Ġholder : ĠPro blems Holder ) Ġ: ĠH CLE lement Visitor () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġvisit Block ( block : ĠH CL Block ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠTODO : ĠCheck Ġwhether Ġit 's Ġcorrect Ġto Ġcheck ĠF QN ĊĠĠĠĠĠ ĠH CL QualifiedName Provider . get FQ N ( block ) Ġ?: Ġreturn ĊĠĠĠĠĠ Ġ// ĠTODO : ĠSupport Ġsub - blocks Ġ( based Ġon Ġmodel ) ĊĠĠĠĠĠ Ġval Ġproperties Ġ= Ġblock .` object ` ?. property List Ġ?: Ġreturn ĊĠĠĠĠĠ Ġval Ġmodel Ġ= ĠModel Helper . getBlock Properties ( block ). associate By Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠ Ġval Ġgrouped Duplicates Ġ= Ġproperties . groupBy Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. filter Values Ġ{ Ġit . size Ġ>= Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. filter Keys Ġ{ Ġmodel [ it ] Ġis ĠProperty Type Ġ} ĊĠĠĠĠĠ Ġfor Ġ(( name , Ġprops ) Ġin Ġgrouped Duplicates ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( prop Ġin Ġprops ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġholder . register Problem ( prop . name Element , Ġ" Property Ġ'$ name ' Ġdeclared Ġmultiple Ġtimes Ġinside Ġone Ġblock ", ĠProblem Highlight Type . GENERIC _ ERROR , Ġ* get Fixes ( prop , Ġprops )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Duplicates ( property : ĠH CL Property ): ĠList < H CL Property >? Ġ{ ĊĠĠĠ Ġval Ġblock Ġ= Ġproperty . parent ?. parent Ġas ? ĠH CL Block Ġ?: Ġreturn Ġnull ĊĠĠĠ ĠH CL QualifiedName Provider . get FQ N ( block ) Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġval Ġproperties Ġ= Ġblock .` object ` ?. property List Ġ?: Ġreturn Ġnull ĊĊĠĠĠ Ġreturn Ġproperties . filter Ġ{ Ġit . name Ġ== Ġproperty . name Ġ&& Ġit Ġ!= Ġproperty Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Fixes ( current : ĠH CL Property , Ġduplicates : ĠList < H CL Property >): ĠArray < Local Quick Fix > Ġ{ ĊĠĠĠ Ġval Ġfixes Ġ= ĠArrayList < Local Quick Fix >() ĊĊĠĠĠ Ġval Ġfirst Ġ= Ġduplicates . first OrNull Ġ{ Ġit Ġ!= Ġcurrent Ġ} ĊĠĠĠ Ġfirst ?. containing File ?. virtual File ?. let Ġ{ Ġcreate Navigate To D upe Fix ( it , Ġfirst . text Offset , Ġduplicates . size Ġ<= Ġ 2 )?. let Ġ{ Ġfixes . add ( it ) Ġ} Ġ} ĊĠĠĠ Ġ// ĠTODO : ĠSupport Ġ' show Ġall Ġduplicates ' Ġfix ĊĠĠĠ Ġ// current . containing File ?. virtual File ?. let Ġ{ Ġcreate Show Other Dup es Fix ( it , Ġcurrent . text Offset , ĠNullable Function Ġ{ Ġparam Ġ-> Ġget Duplicates ( param . parent Ġas ĠH CL Property ) Ġ}) ?. let Ġ{ Ġfixes . add ( it ) Ġ} Ġ} ĊĊĠĠĠ Ġreturn Ġfixes . to Typed Array () ĊĠ Ġ} Ċ }