package org.simpleflatmapper.reflect.setter;
import org.simpleflatmapper.reflect.getter.GetterHelper;
import org.simpleflatmapper.util.TypeHelper;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
public class SetterHelper {
public static boolean methodNameMatchesProperty(final String name, final String property) {
return (name.startsWith("set") && name.regionMatches(true, 3, property, 0, property.length()))
|| name.equalsIgnoreCase(property);
}
public static boolean fieldModifiersMatches(final int modifiers) {
return !Modifier.isStatic(modifiers) && !Modifier.isFinal(modifiers);
}
public static boolean fieldNameMatchesProperty(final String name, final String property) {
return name.equalsIgnoreCase(property);
}
public static String getPropertyNameFromMethodName(final String name) {
if (name.startsWith("set") && name.length() > 3) {
return name.substring(3, 4).toLowerCase() + name.substring(4);
} else {
return name;
}
}
public static boolean isSetter(Method method) {
return (method.getReturnType().equals(void.class)
|| method.getReturnType().equals(method.getDeclaringClass()))
&& method.getParameterTypes() != null && method.getParameterTypes().length == 1
&& GetterHelper.isPublicMember(method.getModifiers())
&& !isEquals(method);
}
private static boolean isEquals(Method method) {
return method.getName() == "equals" && method.getReturnType().equals(boolean.class)
&& method.getParameterTypes() != null && method.getParameterTypes().length == 1;
}
public static boolean isCompatible(Type propertyType, Type settableType) {
return TypeHelper.isAssignable(propertyType, settableType);
}
}