/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 6 Ġ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 . jetbrains . kotlin . resolve . scopes Ċ Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġorg . jetbrains . kotlin . descriptors .* Ċ import Ġorg . jetbrains . kotlin . diagnostics . Diagnostic Ċ import Ġorg . jetbrains . kotlin . diagnostics . Diagnostic Factory 1 Ċ import Ġorg . jetbrains . kotlin . diagnostics . Errors Ċ import Ġorg . jetbrains . kotlin . diagnostics . report On Declaration OrFail Ċ import Ġorg . jetbrains . kotlin . incremental . components . No Lookup Location Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Trace Ċ import Ġorg . jetbrains . kotlin . resolve . Descriptor To Source Utils Ċ import Ġorg . jetbrains . kotlin . resolve . Descriptor Utils Ċ import Ġorg . jetbrains . kotlin . resolve . Over load Checker ĊĊ Ċ abstract Ġclass ĠAbstract Local Re declaration Checker ( val Ġoverload Checker : ĠOver load Checker ) Ġ: ĠLocal Re declaration Checker Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcheck Before Adding To Scope ( scope : ĠLex ical Scope , Ġnew Descriptor : ĠDeclaration Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġnew Descriptor . name ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠNo Lookup Location . WHEN _ CHECK _ DECL AR ATION _ CONF LI CT S ĊĠĠĠĠĠĠĠ Ġwhen Ġ( new Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠClass ifier Descriptor , Ġis ĠVariable Descriptor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Descriptor Ġ= Ġscope . get Cont ributed Classifier ( name , Ġlocation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġscope . get Cont ributed Variables ( name , Ġlocation ). first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Descriptor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Re declaration ( other Descriptor , Ġnew Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFunction Descriptor Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Functions Ġ= Ġscope . get Cont ributed Functions ( name , Ġlocation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Class Ġ= Ġscope . get Cont ributed Classifier ( name , Ġlocation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpotentially Conflict ing Over loads Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( other Class Ġis ĠClass Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother Functions Ġ+ Ġother Class . construct ors ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother Functions ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( over loaded Descriptor Ġin Ġpotentially Conflict ing Over loads ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! overload Checker . is Over load able ( over loaded Descriptor , Ġnew Descriptor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Conflict ing Over loads ( new Descriptor , Ġover loaded Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Unexpected Ġtype Ġof Ġdescriptor : Ġ${ new Descriptor :: class . java . name }, Ġdescriptor : Ġ$ new Descriptor ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġhandle Re declaration ( first : ĠDeclaration Descriptor , Ġsecond : ĠDeclaration Descriptor ) ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġhandle Conflict ing Over loads ( first : ĠCallable Member Descriptor , Ġsecond : ĠCallable Member Descriptor ) Ċ } Ċ Ċ class ĠThrow ing Local Re declaration Checker ( overload Checker : ĠOver load Checker ) Ġ: ĠAbstract Local Re declaration Checker ( overload Checker ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġhandle Re declaration ( first : ĠDeclaration Descriptor , Ġsecond : ĠDeclaration Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Re declaration : Ġ% s Ġ(% s ) Ġand Ġ% s Ġ(% s ) Ġ( no Ġline Ġinfo Ġavailable )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDescriptor Utils . getF q Name ( first ), Ġfirst , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDescriptor Utils . getF q Name ( second ), Ġsecond ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Conflict ing Over loads ( first : ĠCallable Member Descriptor , Ġsecond : ĠCallable Member Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Conflict ing Ġover loads : Ġ% s Ġ(% s ) Ġand Ġ% s Ġ(% s ) Ġ( no Ġline Ġinfo Ġavailable )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDescriptor Utils . getF q Name ( first ), Ġfirst , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDescriptor Utils . getF q Name ( second ), Ġsecond ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠTrace Based Local Re declaration Checker ( val Ġtrace : ĠBinding Trace , Ġoverload Checker : ĠOver load Checker ) Ġ: ĊĠĠĠ ĠAbstract Local Re declaration Checker ( overload Checker ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġhandle Re declaration ( first : ĠDeclaration Descriptor , Ġsecond : ĠDeclaration Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreport On Declaration OrFail ( trace , Ġfirst ) Ġ{ ĠErrors . RE DECL AR ATION . on ( it , ĠlistOf ( first , Ġsecond )) Ġ} ĊĠĠĠĠĠĠĠ Ġreport On Declaration OrFail ( trace , Ġsecond ) Ġ{ ĠErrors . RE DECL AR ATION . on ( it , ĠlistOf ( first , Ġsecond )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Conflict ing Over loads ( first : ĠCallable Member Descriptor , Ġsecond : ĠCallable Member Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreport On Declaration OrFail ( trace , Ġfirst ) Ġ{ ĠErrors . CONF LI CT ING _ OVERLOAD S . on ( it , ĠlistOf ( first , Ġsecond )) Ġ} ĊĠĠĠĠĠĠĠ Ġreport On Declaration OrFail ( trace , Ġsecond ) Ġ{ ĠErrors . CONF LI CT ING _ OVERLOAD S . on ( it , ĠlistOf ( first , Ġsecond )) Ġ} ĊĠĠĠ Ġ} Ċ }