Provide "equals" and "hashCode" for reflection objects

This commit is contained in:
Alexander Udalov
2014-06-30 19:16:59 +04:00
parent 704de8992e
commit c5d92cc03e
8 changed files with 81 additions and 2 deletions
@@ -56,4 +56,10 @@ class KClassImpl<out T>(val jClass: Class<T>) : KClass<T> {
else {
KMutableForeignMemberProperty<T, Any>(name, this)
}
override fun equals(other: Any?): Boolean =
other is KClassImpl<*> && jClass == other.jClass
override fun hashCode(): Int =
jClass.hashCode()
}
@@ -30,6 +30,12 @@ open class KForeignMemberProperty<T : Any, out R>(
override fun get(receiver: T): R {
return field.get(receiver) as R
}
override fun equals(other: Any?): Boolean =
other is KForeignMemberProperty<*, *> && name == other.name && owner == other.owner
override fun hashCode(): Int =
name.hashCode() * 31 + owner.hashCode()
}
class KMutableForeignMemberProperty<T : Any, out R>(
@@ -39,6 +39,12 @@ open class KMemberPropertyImpl<T : Any, out R>(
override fun get(receiver: T): R {
return getter(receiver) as R
}
override fun equals(other: Any?): Boolean =
other is KMemberPropertyImpl<*, *> && name == other.name && owner == other.owner
override fun hashCode(): Int =
name.hashCode() * 31 + owner.hashCode()
}
class KMutableMemberPropertyImpl<T : Any, R>(
@@ -18,4 +18,10 @@ package kotlin.reflect.jvm.internal
import kotlin.reflect.KPackage
class KPackageImpl(val jClass: Class<*>) : KPackage
class KPackageImpl(val jClass: Class<*>) : KPackage {
override fun equals(other: Any?): Boolean =
other is KPackageImpl && jClass == other.jClass
override fun hashCode(): Int =
jClass.hashCode()
}
@@ -32,6 +32,12 @@ open class KTopLevelExtensionPropertyImpl<T, out R>(
override fun get(receiver: T): R {
return getter(null, receiver) as R
}
override fun equals(other: Any?): Boolean =
other is KTopLevelExtensionPropertyImpl<*, *> && name == other.name && owner == other.owner && receiverClass == other.receiverClass
override fun hashCode(): Int =
(name.hashCode() * 31 + owner.hashCode()) * 31 + receiverClass.hashCode()
}
class KMutableTopLevelExtensionPropertyImpl<T, R>(
@@ -32,6 +32,12 @@ open class KTopLevelVariableImpl<out R>(
override fun get(): R {
return getter(null) as R
}
override fun equals(other: Any?): Boolean =
other is KTopLevelVariableImpl<*> && name == other.name && owner == other.owner
override fun hashCode(): Int =
name.hashCode() * 31 + owner.hashCode()
}
class KMutableTopLevelVariableImpl<R>(