Support equals, hashCode, toString for ::-references without reflection
This commit is contained in:
@@ -43,4 +43,13 @@ public class ClassReference(override val jClass: Class<*>) : KClass<Any>, ClassB
|
||||
get() = error()
|
||||
|
||||
private fun error(): Nothing = throw KotlinReflectionNotSupportedError()
|
||||
|
||||
override fun equals(other: Any?) =
|
||||
other is ClassReference && jClass == other.jClass
|
||||
|
||||
override fun hashCode() =
|
||||
jClass.hashCode()
|
||||
|
||||
override fun toString() =
|
||||
jClass.toString() + Reflection.REFLECTION_NOT_AVAILABLE
|
||||
}
|
||||
|
||||
@@ -79,4 +79,28 @@ public class FunctionReference extends FunctionImpl implements KFunction {
|
||||
protected static Error error() {
|
||||
throw new KotlinReflectionNotSupportedError();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj == this) return true;
|
||||
if (!(obj instanceof FunctionReference)) return false;
|
||||
|
||||
FunctionReference other = (FunctionReference) obj;
|
||||
return getOwner().equals(other.getOwner()) &&
|
||||
getName().equals(other.getName()) &&
|
||||
getSignature().equals(other.getSignature());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return (getOwner().hashCode() * 31 + getName().hashCode()) * 31 + getSignature().hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
// TODO: consider adding the class name to toString() for constructors
|
||||
return "<init>".equals(getName())
|
||||
? "constructor" + Reflection.REFLECTION_NOT_AVAILABLE
|
||||
: "function " + getName() + Reflection.REFLECTION_NOT_AVAILABLE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,4 +19,24 @@ package kotlin.jvm.internal;
|
||||
import kotlin.reflect.KProperty;
|
||||
|
||||
public abstract class PropertyReference extends CallableReference implements KProperty {
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj == this) return true;
|
||||
if (!(obj instanceof PropertyReference)) return false;
|
||||
|
||||
PropertyReference other = (PropertyReference) obj;
|
||||
return getOwner().equals(other.getOwner()) &&
|
||||
getName().equals(other.getName()) &&
|
||||
getSignature().equals(other.getSignature());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return (getOwner().hashCode() * 31 + getName().hashCode()) * 31 + getSignature().hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "property " + getName() + Reflection.REFLECTION_NOT_AVAILABLE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +39,8 @@ public class Reflection {
|
||||
factory = impl != null ? impl : new ReflectionFactory();
|
||||
}
|
||||
|
||||
/* package */ static final String REFLECTION_NOT_AVAILABLE = " (Kotlin reflection is not available)";
|
||||
|
||||
private static final KClass[] EMPTY_K_CLASS_ARRAY = new KClass[0];
|
||||
|
||||
public static KClass createKotlinClass(Class javaClass) {
|
||||
|
||||
Reference in New Issue
Block a user