goja-core/src/main/java/goja/core/kits/reflect/ClassKit.java
public static boolean isUserLevelMethod(Method method) {
        Preconditions.checkNotNull(method, "Method must not be null");
        return (method.isBridge() || (!method.isSynthetic() && !isGroovyObjectMethod(method)));
    }
public static boolean isUserLevelMethod(Method method) {
        Preconditions.checkNotNull(method, "Method must not be null");
        return (method.isBridge() || (!method.isSynthetic() && !isGroovyObjectMethod(method)));
    }
Determine whether the given method is declared by the user or at least pointing to
a user-declared method.
<p>Checks {@link Method#isSynthetic()} (for implementation methods) as well as the
{@code GroovyObject} interface (for interface methods; on an implementation class,
implementations of the {@code GroovyObject} methods will be marked as synthetic anyway).
Note that, despite being synthetic, bridge methods ({@link Method#isBridge()}) are considered
as user-level methods since they are eventually pointing to a user-declared generic method.

@param method the method to check
@return {@code true} if the method can be considered as user-declared; [@code false} otherwise