| File: Rules\CannotChangeParameterName.cs | Web Access |
| Project: src\sdk\src\Compatibility\ApiCompat\Microsoft.DotNet.ApiCompatibility\Microsoft.DotNet.ApiCompatibility.csproj (Microsoft.DotNet.ApiCompatibility) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics; using Microsoft.CodeAnalysis; namespace Microsoft.DotNet.ApiCompatibility.Rules { /// <summary> /// This class implements a rule to check that the parameter names between public methods do not change. /// </summary> public class CannotChangeParameterName : IRule { public CannotChangeParameterName(IRuleSettings settings, IRuleRegistrationContext context) => context.RegisterOnMemberSymbolAction(RunOnMemberSymbol); private void RunOnMemberSymbol( ISymbol? left, ISymbol? right, ITypeSymbol leftContainingType, ITypeSymbol rightContainingType, MetadataInformation leftMetadata, MetadataInformation rightMetadata, IList<CompatDifference> differences) { if (left is not IMethodSymbol leftMethod || right is not IMethodSymbol rightMethod) { return; } Debug.Assert(leftMethod.Parameters.Length == rightMethod.Parameters.Length); for (int i = 0; i < leftMethod.Parameters.Length; i++) { IParameterSymbol leftParam = leftMethod.Parameters[i]; IParameterSymbol rightParam = rightMethod.Parameters[i]; if (!leftParam.Name.Equals(rightParam.Name)) { differences.Add(new CompatDifference( leftMetadata, rightMetadata, DiagnosticIds.CannotChangeParameterName, string.Format(Resources.CannotChangeParameterName, left, leftParam.Name, rightParam.Name), DifferenceType.Changed, $"{leftMethod.GetDocumentationCommentId()}${i}")); } } } } }