| File: CodeDomFixup\CodeDomVisitors\RemoveSyncMethodsFromInterface.cs | Web Access |
| Project: src\src\dotnet-svcutil\lib\src\dotnet-svcutil-lib.csproj (dotnet-svcutil-lib) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using Microsoft.CodeDom; using System.ServiceModel; namespace Microsoft.Tools.ServiceModel.Svcutil { internal class RemoveSyncMethodsFromInterface : ServiceContractVisitor { protected override void VisitAttributedType(CodeTypeDeclaration type) { base.VisitAttributedType(type); CollectionHelpers.MapList<CodeMemberMethod>( type.Members, delegate (CodeMemberMethod method) { return CodeDomHelpers.IsBeginMethod(method) || CodeDomHelpers.IsTaskAsyncMethod(method) || CodeDomHelpers.IsEndMethod(method); }, this.CopyAttrsToTaskAsyncMethod ); } private void CopyAttrsToTaskAsyncMethod(CodeMemberMethod syncMethod, int index) { CodeMemberMethod taskAyncMethod = CodeDomHelpers.GetTaskAsyncMethodForMethod(CurrentType.Members, syncMethod); if (taskAyncMethod != null && !ReferenceEquals(taskAyncMethod, syncMethod)) { foreach (CodeAttributeDeclaration attr in syncMethod.CustomAttributes) { // skip [OperationContract] as that appears in both places and is guaranteed to be the same if (!CodeDomHelpers.MatchType<OperationContractAttribute>(attr.AttributeType)) { taskAyncMethod.CustomAttributes.Add(attr); } } } } } }