/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 Ġthe Ġoriginal Ġauthor Ġor Ġauthors . Ċ Ġ* Ċ Ġ* Ġ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 . gradle . kotlin . dsl . execution Ċ Ċ import Ġorg . gradle . internal . hash . HashCode Ċ Ċ import Ġjava . lang . ref . Weak Reference ĊĊ Ċ internal Ċ class ĠProgram Id ( ĊĠĠĠ Ġprivate Ġval Ġtemplate Id : ĠString , ĊĠĠĠ Ġprivate Ġval Ġsource Hash : ĠHash Code , ĊĠĠĠ Ġparent ClassLoader : ĠClassLoader , ĊĠĠĠ Ġprivate Ġval Ġclass Path Hash : ĠHash Code ? Ġ= Ġnull Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġval Ġparent ClassLoader Ġ= ĠWeak Reference ( parent ClassLoader ) ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġthat Ġ= Ġother Ġas ? ĠProgram Id Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġthis Parent Loader Ġ= Ġparent ClassLoader . get () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Parent Loader Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġthis Parent Loader Ġ== Ġthat . parent ClassLoader . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġtemplate Id Ġ== Ġthat . template Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġsource Hash Ġ== Ġthat . source Hash ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġclass Path Hash Ġ== Ġthat . class Path Hash ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġtemplate Id . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġsource Hash . hashCode () ĊĠĠĠĠĠĠĠ Ġparent ClassLoader . get ()?. let Ġ{ Ġloader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġloader . hashCode () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclass Path Hash ?. let Ġ{ Ġclass Path Hash Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġclass Path Hash . hashCode () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ