static @Nullable PyType getCallType(@NotNull PyCallExpression call,
                                      @NotNull TypeEvalContext context,
                                      @SuppressWarnings("unused") @NotNull TypeEvalContext.Key key) {
    PyExpression callee = call.getCallee();
    if (callee instanceof PyReferenceExpression) {
      // hardwired special cases
      if (PyNames.SUPER.equals(callee.getText())) {
        final Maybe<PyType> superCallType = getSuperCallType(call, context);
        if (superCallType.isDefined()) {
          return superCallType.value();
        }
      }
      if ("type".equals(callee.getText())) {
        final PyExpression[] args = call.getArguments();
        if (args.length == 1) {
          final PyExpression arg = args[0];
          final PyType argType = context.getType(arg);
          if (argType instanceof PyClassType classType) {
            if (!classType.isDefinition()) {
              final PyClass cls = classType.getPyClass();
              return context.getType(cls);
            }
          }
          else {
            return null;
          }
        }
      }
    }
    if (callee instanceof PySubscriptionExpression) {
      final PyType parametrizedType = Ref.deref(PyTypingTypeProvider.getType(callee, context));
      if (parametrizedType != null) {
        return parametrizedType;
      }
    }
    final PyResolveContext resolveContext = PyResolveContext.defaultContext(context);
    return getCallType(multiResolveCallee(call, resolveContext), call, context);
  }
static @Nullable PyType getCallType(@NotNull PyCallExpression call,
                                      @NotNull TypeEvalContext context,
                                      @SuppressWarnings("unused") @NotNull TypeEvalContext.Key key)