//----------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Description { using System; using System.Collections.Generic; using System.CodeDom; using System.CodeDom.Compiler; using System.ServiceModel; public class OperationContractGenerationContext { readonly CodeMemberMethod syncMethod; readonly CodeMemberMethod beginMethod; readonly ServiceContractGenerationContext contract; readonly CodeMemberMethod endMethod; readonly OperationDescription operation; readonly ServiceContractGenerator serviceContractGenerator; readonly CodeTypeDeclaration declaringType; readonly CodeMemberMethod taskMethod; CodeTypeReference declaringTypeReference; OperationContractGenerationContext(ServiceContractGenerator serviceContractGenerator, ServiceContractGenerationContext contract, OperationDescription operation, CodeTypeDeclaration declaringType) { if (serviceContractGenerator == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("serviceContractGenerator")); if (contract == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("contract")); if (declaringType == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("declaringType")); this.serviceContractGenerator = serviceContractGenerator; this.contract = contract; this.operation = operation; this.declaringType = declaringType; } public OperationContractGenerationContext(ServiceContractGenerator serviceContractGenerator, ServiceContractGenerationContext contract, OperationDescription operation, CodeTypeDeclaration declaringType, CodeMemberMethod syncMethod, CodeMemberMethod beginMethod, CodeMemberMethod endMethod, CodeMemberMethod taskMethod) : this(serviceContractGenerator, contract, operation, declaringType) { if (syncMethod == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("syncMethod")); if (beginMethod == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("beginMethod")); if (endMethod == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("endMethod")); if (taskMethod == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("taskMethod")); this.syncMethod = syncMethod; this.beginMethod = beginMethod; this.endMethod = endMethod; this.taskMethod = taskMethod; } public OperationContractGenerationContext(ServiceContractGenerator serviceContractGenerator, ServiceContractGenerationContext contract, OperationDescription operation, CodeTypeDeclaration declaringType, CodeMemberMethod syncMethod, CodeMemberMethod beginMethod, CodeMemberMethod endMethod) : this(serviceContractGenerator, contract, operation, declaringType) { if (syncMethod == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("syncMethod")); if (beginMethod == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("beginMethod")); if (endMethod == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("endMethod")); this.syncMethod = syncMethod; this.beginMethod = beginMethod; this.endMethod = endMethod; } public OperationContractGenerationContext(ServiceContractGenerator serviceContractGenerator, ServiceContractGenerationContext contract, OperationDescription operation, CodeTypeDeclaration declaringType, CodeMemberMethod syncMethod, CodeMemberMethod taskMethod) : this(serviceContractGenerator, contract, operation, declaringType) { if (syncMethod == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("syncMethod")); if (taskMethod == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("taskMethod")); this.syncMethod = syncMethod; this.taskMethod = taskMethod; } public OperationContractGenerationContext(ServiceContractGenerator serviceContractGenerator, ServiceContractGenerationContext contract, OperationDescription operation, CodeTypeDeclaration declaringType, CodeMemberMethod method) : this(serviceContractGenerator, contract, operation, declaringType) { if (method == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("method")); this.syncMethod = method; this.beginMethod = null; this.endMethod = null; } public ServiceContractGenerationContext Contract { get { return this.contract; } } public CodeTypeDeclaration DeclaringType { get { return this.declaringType; } } internal CodeTypeReference DeclaringTypeReference { get { return this.declaringTypeReference; } set { this.declaringTypeReference = value; } } public CodeMemberMethod BeginMethod { get { return this.beginMethod; } } public CodeMemberMethod EndMethod { get { return this.endMethod; } } public CodeMemberMethod TaskMethod { get { return this.taskMethod; } } public CodeMemberMethod SyncMethod { get { return this.syncMethod; } } public bool IsAsync { get { return this.beginMethod != null; } } public bool IsTask { get { return this.taskMethod != null; } } // true if this operation was declared somewhere up the hierarchy (rather than at this level) internal bool IsInherited { get { return !(this.declaringType == contract.ContractType || this.declaringType == contract.DuplexCallbackType); } } public OperationDescription Operation { get { return this.operation; } } public ServiceContractGenerator ServiceContractGenerator { get { return this.serviceContractGenerator; } } } }