docs: public static Selector getSelector(MutableCallSite callSite, Class sender, String methodName, int callID, boolean safeNavigation, boolean thisCall, boolean spreadCall, Object[] arguments) {
          CALL_TYPES callType = CALL_TYPES_VALUES[callID];
          switch (callType) {
              case INIT: return new InitSelector(callSite, sender, methodName, callType, safeNavigation, thisCall, spreadCall, arguments);
              case METHOD: return new MethodSelector(callSite, sender, methodName, callType, safeNavigation, thisCall, spreadCall, arguments);
              case GET: 
                  return new PropertySelector(callSite, sender, methodName, callType, safeNavigation, thisCall, spreadCall, arguments);
              case SET:
                  throw new GroovyBugError("your call tried to do a property set, which is not supported.");
              case CAST:  return new CastSelector(callSite, arguments);
              default: throw new GroovyBugError("unexpected call type");
          }
      }