private void ProcessParameter(ParameterInfoCollection aParameters, int aParamIndex)
        {
            ParameterInfo parameterInfo = aParameters[aParamIndex];

            parameterInfo.MissingUpstreamDataSourcePrompt = false;
            IParameterDef parameterDef = null;
            bool          flag         = aParameters.UserProfileState != UserProfileState.None;

            if (this.m_processingContext.SnapshotProcessing && parameterInfo.UsedInQuery)
            {
                parameterInfo.State = ReportParameterState.HasValidValue;
                parameterInfo.StoreLabels();
            }
            else
            {
                if (parameterInfo.DynamicDefaultValue || parameterInfo.DynamicValidValues || parameterInfo.DynamicPrompt)
                {
                    this.UpdateParametersContext(aParameters, this.m_lastDynamicParam, aParamIndex);
                    this.m_lastDynamicParam = aParamIndex;
                    parameterDef            = this.GetParameterDef(aParamIndex);
                    Global.Tracer.Assert(null != parameterDef, "null != paramDef, parameter {0}", parameterInfo.Name.MarkAsPrivate());
                    Global.Tracer.Assert(parameterInfo.DataType == parameterDef.DataType, "paramInfo.DataType == paramDef.DataType, parameter {0}", parameterInfo.Name.MarkAsPrivate());
                    this.AssertAreSameParameterByName(parameterInfo, parameterDef);
                }
                bool flag2 = this.m_dependenciesSubmitted.ContainsKey(parameterInfo.Name);
                if (parameterInfo.DynamicPrompt && (flag2 || !parameterInfo.IsUserSupplied || flag))
                {
                    this.SetupExprHost(parameterDef);
                    string text = this.EvaluatePromptExpr(parameterInfo, parameterDef);
                    if (text == null || text.Equals(string.Empty))
                    {
                        text = parameterInfo.Name;
                    }
                    parameterInfo.Prompt = text;
                }
                switch (parameterInfo.CalculateDependencyStatus())
                {
                case ReportParameterDependencyState.HasOutstandingDependencies:
                    parameterInfo.State  = ReportParameterState.HasOutstandingDependencies;
                    parameterInfo.Values = null;
                    if (parameterInfo.DynamicDefaultValue)
                    {
                        parameterInfo.DefaultValues = null;
                    }
                    if (parameterInfo.DynamicValidValues)
                    {
                        parameterInfo.ValidValues = null;
                    }
                    return;

                case ReportParameterDependencyState.MissingUpstreamDataSourcePrompt:
                    parameterInfo.MissingUpstreamDataSourcePrompt = true;
                    parameterInfo.State = ReportParameterState.DynamicValuesUnavailable;
                    return;

                default:
                    Global.Tracer.Assert(false, "Unexpected dependency state.");
                    break;

                case ReportParameterDependencyState.AllDependenciesSpecified:
                    break;
                }
                bool flag3 = parameterInfo.DynamicDefaultValue && (parameterInfo.Values == null || (parameterInfo.Values != null && !parameterInfo.IsUserSupplied)) && ((this.m_processingContext.SnapshotProcessing && parameterDef.HasDefaultValuesExpressions() && (flag || (parameterInfo.DependencyList != null && (parameterInfo.Values == null || (!parameterInfo.IsUserSupplied && flag2))))) || (!this.m_processingContext.SnapshotProcessing && (flag2 || parameterInfo.Values == null)));
                if (parameterInfo.DynamicValidValues && ((this.m_processingContext.SnapshotProcessing && parameterDef.HasValidValuesValueExpressions() && (parameterInfo.DependencyList != null || (flag && flag3))) || (!this.m_processingContext.SnapshotProcessing && ((parameterInfo.ValidValues != null && flag2) || parameterInfo.ValidValues == null))) && !this.ProcessValidValues(parameterInfo, parameterDef, flag3))
                {
                    parameterInfo.State = ReportParameterState.DynamicValuesUnavailable;
                }
                else if (!flag3 && parameterInfo.Values != null)
                {
                    if (parameterInfo.ValueIsValid())
                    {
                        parameterInfo.State = ReportParameterState.HasValidValue;
                        parameterInfo.StoreLabels();
                    }
                    else
                    {
                        parameterInfo.State  = ReportParameterState.InvalidValueProvided;
                        parameterInfo.Values = null;
                        parameterInfo.EnsureLabelsAreGenerated();
                    }
                }
                else
                {
                    parameterInfo.Values = null;
                    parameterInfo.State  = ReportParameterState.MissingValidValue;
                    if (flag3 && !this.ProcessDefaultValue(parameterInfo, parameterDef))
                    {
                        parameterInfo.State = ReportParameterState.DynamicValuesUnavailable;
                    }
                    else
                    {
                        if (parameterInfo.DefaultValues != null)
                        {
                            parameterInfo.Values = parameterInfo.DefaultValues;
                            if (!parameterInfo.ValueIsValid())
                            {
                                parameterInfo.Values = null;
                                parameterInfo.State  = ReportParameterState.DefaultValueInvalid;
                                parameterInfo.EnsureLabelsAreGenerated();
                            }
                            else
                            {
                                parameterInfo.State = ReportParameterState.HasValidValue;
                                parameterInfo.StoreLabels();
                            }
                        }
                        this.m_paramDataSetCache = null;
                    }
                }
            }
        }