private void DetectChangedParameterOrder()

in openapi-diff/src/modeler/AutoRest.Swagger/Model/Operation.cs [327:373]


        private void DetectChangedParameterOrder(
            ComparisonContext<ServiceDefinition> context,
            List<(SwaggerParameter param, bool isGlobal)> currParamsInfo,
            List<(SwaggerParameter param, bool isGlobal)> priorParamsInfo)
        {
            SwaggerParameter[] currParamsResolvedOrdered =
                currParamsInfo.Where(ParamOrderMatters).Select(paramInfo => paramInfo.param).ToArray();

            SwaggerParameter[] priorParamsResolvedOrdered =
                priorParamsInfo.Where(ParamOrderMatters).Select(paramInfo => paramInfo.param).ToArray();

            int currParamsCount = currParamsResolvedOrdered.Length;
            int priorParamsCount = priorParamsResolvedOrdered.Length;

            int paramIndex = 0;
            while (paramIndex < priorParamsCount)
            {
                SwaggerParameter currParamAtIndex =
                    paramIndex < currParamsCount ? currParamsResolvedOrdered[paramIndex] : null;
                SwaggerParameter priorParamAtIndex = priorParamsResolvedOrdered[paramIndex];

                if (!ParamsAreSame(currParamAtIndex, priorParamAtIndex))
                {
                    int newParamIndex = FindParameterIndex(priorParamAtIndex, currParamsResolvedOrdered);
                    bool paramOrderDoesMatterInNewSpec = newParamIndex != -1;

                    if (paramOrderDoesMatterInNewSpec)
                    {
                        context.LogBreakingChange(
                            ComparisonMessages.ChangedParameterOrder,
                            priorParamAtIndex.Name,
                            priorParamAtIndex.In,
                            paramIndex,
                            newParamIndex);
                    }
                    else
                    {
                        // If param order does not matter in the new spec we not report ComparisonMessages.ChangedParameterOrder breaking change.
                        // However, it is still a breaking change to a) change the parameter location so that its order doesn't matter, 
                        // OR b) to remove a parameter altogether.
                        // We expect other breaking changes to be reported in such case like e.g. ComparisonMessages.ParameterLocationHasChanged.
                    }
                }

                paramIndex++;
            }
        }