public static Method findMethod(final Method bridgeMethod, final Class<?> targetClass) {
        if (bridgeMethod == null || targetClass == null) {
            return bridgeMethod;
        }

        if (!bridgeMethod.isBridge()) {
            return bridgeMethod;
        }

        Method[] methods = bridgeMethod.getDeclaringClass().getDeclaredMethods();
        for (Method method : methods) {
            // don't care about methods that are bridge methods
            if (method.isBridge()) {
                continue;
            }

            // check if the method is more specific
            if (isAssignable(method, bridgeMethod)) {
                return method;
            }
        }
        return bridgeMethod;
    }
Find the original method for the Java5 bridge Method. If the supplied method
is not a bridge method then the supplied method is returned.
If the supplied method is a bridge method, the algorithm tries to find a more
specific method with parameters and return types that can be assigned to the
the supplied method parameters and return type.
<p>
Informally, method A is more specific than method B if
any invocation handled by method A can also be handled by method B.

@param bridgeMethod the bridge method (Java 5 specific)
@param targetClass  the class the method belongs to
@return the original method or a more specific method if available
core/src/main/java/com/github/dozermapper/core/util/BridgedMethodFinder.java