private static boolean isGroovyMOPMethod(Class<?> type, MethodDescription method) {
    return GroovyObject.class.isAssignableFrom(type) &&
      method.getDeclaredAnnotations().isAnnotationPresent(Internal.class) &&
      method.isDefaultMethod();
  }
Checks if the passed method, is a Groovy MOP method from {@link GroovyObject}.

<p>{@code GroovyObject} defined MOP methods {@code getProperty()}, {@code setProperty()} and {@code invokeMethod()},
because these methods are handled in a special way in the {@link AbstractCallSite} when marked with {@link Internal @Internal}.
See also {@link GroovyObject} comments.
So we need to mark the method with {@link Internal @Internal} annotation, if we intercept it.

@param type   the type the mock
@param method the method to intercept
@return {@code true}, if the method is a Groovy MOP method
spock-core/src/main/java/org/spockframework/mock/runtime/ByteBuddyMockFactory.java