package org.simpleflatmapper.reflect.getter; import org.simpleflatmapper.util.TypeHelper; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.lang.reflect.Type; public class GetterHelper { public static final int SYNTHETIC = 0x00001000; public static boolean isPublicMember(final int modifiers) { return !Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers) && (modifiers & SYNTHETIC) == 0; } public static boolean methodNameMatchesProperty(final String name, final String property) { if (name.length() > 3 && (name.startsWith("get"))) { return name.regionMatches(true, 3, property, 0, property.length()); } else if (name.length()> 2 && name.startsWith("is")) { return name.regionMatches(true, 2, property, 0, property.length()); } return 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("get") && name.length() > 3) { return name.substring(3, 4).toLowerCase() + name.substring(4); } else if (name.startsWith("is") && name.length() > 2) { return name.substring(2, 3).toLowerCase() + name.substring(3); } else { return name; } } public static boolean isGetter(Method method) { return GetterHelper.isPublicMember(method.getModifiers()) && (method.getParameterTypes() == null || method.getParameterTypes().length == 0) && !method.getReturnType().equals(void.class) && !isToString(method) && !isHashcode(method) && !isClone(method); } private static boolean isClone(Method method) { return method.getName() == "clone" && (method.getReturnType().equals(Object.class) || method.getDeclaringClass().equals(method.getReturnType())) && (method.getParameterTypes() == null || method.getParameterTypes().length == 0); } private static boolean isToString(Method method) { return method.getName() == "toString" && method.getReturnType().equals(String.class) && (method.getParameterTypes() == null || method.getParameterTypes().length == 0); } private static boolean isHashcode(Method method) { return method.getName() == "hashCode" && method.getReturnType().equals(int.class) && (method.getParameterTypes() == null || method.getParameterTypes().length == 0); } public static boolean isCompatible(Type targetType, Type returnType) { return TypeHelper.isAssignable(targetType, returnType); } }