package org.unbrokendome.eventbus.util;
import java.lang.reflect.Method;
import java.util.Arrays;
public final class MethodSignature {
private final String name;
private final Class<?>[] parameterTypes;
private MethodSignature(String name, Class<?>[] parameterTypes) {
this.name = name;
this.parameterTypes = parameterTypes;
}
public static MethodSignature of(Method method) {
return new MethodSignature(method.getName(), method.getParameterTypes());
}
public String getName() {
return name;
}
public Class<?>[] getParameterTypes() {
return parameterTypes;
}
public boolean matches(Method method) {
return method != null
&& name.equals(method.getName())
&& Arrays.equals(parameterTypes, method.getParameterTypes());
}
@Override
public boolean equals(Object obj) {
return (this == obj)
|| (obj instanceof MethodSignature && equals((MethodSignature) obj));
}
private boolean equals(MethodSignature other) {
return this.name.equals(other.getName())
&& Arrays.equals(this.parameterTypes, other.getParameterTypes());
}
@Override
public int hashCode() {
return 31 * name.hashCode()
+ Arrays.hashCode(parameterTypes);
}
}