private boolean matchParameterAndArgument(@Nullable PyType parameterType,
                                              @Nullable PyType argumentType,
                                              @Nullable PyExpression argument,
                                              @NotNull PyTypeChecker.GenericSubstitutions substitutions) {
      if (parameterType != null && argumentType instanceof PyTypedDictType && argument != null) {
        if (reportTypedDictProblems(parameterType, (PyTypedDictType)argumentType, argument)) return true;
      }

      return PyTypeChecker.match(parameterType, argumentType, myTypeEvalContext, substitutions) &&
             !PyProtocolsKt.matchingProtocolDefinitions(parameterType, argumentType, myTypeEvalContext);
    }
private boolean matchParameterAndArgument(@Nullable PyType parameterType,
                                              @Nullable PyType argumentType,
                                              @Nullable PyExpression argument,
                                              @NotNull PyTypeChecker.GenericSubstitutions substitutions)