internal ContractMethodInfo(ContractType declaringType, OperationInfo operationInfo) { if (declaringType == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("declaringType"); } if (operationInfo == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("operationInfo"); } if (string.IsNullOrEmpty(operationInfo.Name)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("operationInfo", SR2.GetString(SR2.Error_OperationNameNotSpecified)); } this.declaringType = declaringType; this.name = operationInfo.Name; this.methodAttributes = MethodAttributes.Public | MethodAttributes.Abstract | MethodAttributes.Virtual; SortedList<int, ContractMethodParameterInfo> localParameters = new SortedList<int, ContractMethodParameterInfo>(); foreach (OperationParameterInfo operationParameterInfo in operationInfo.Parameters) { ContractMethodParameterInfo parameterInfo = new ContractMethodParameterInfo(this, operationParameterInfo); if (parameterInfo.Position == -1) { this.returnParam = parameterInfo; } else { localParameters.Add(parameterInfo.Position, parameterInfo); } } this.parameters = new ParameterInfo[localParameters.Count]; foreach (ContractMethodParameterInfo paramInfo in localParameters.Values) { this.parameters[paramInfo.Position] = paramInfo; } if (this.returnParam == null) { OperationParameterInfo returnParameterInfo = new OperationParameterInfo(); returnParameterInfo.Position = -1; returnParameterInfo.ParameterType = typeof(void); this.returnParam = new ContractMethodParameterInfo(this, returnParameterInfo); } OperationContractAttribute operationContract = new OperationContractAttribute(); if (operationInfo.HasProtectionLevel && operationInfo.ProtectionLevel != null) { operationContract.ProtectionLevel = (ProtectionLevel) operationInfo.ProtectionLevel; } operationContract.IsOneWay = operationInfo.IsOneWay; this.attributes = new Attribute[] { operationContract }; declaringType.AddMethod(this); }
internal ContractMethodInfo(ContractType declaringType, OperationInfo operationInfo) { if (declaringType == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("declaringType"); } if (operationInfo == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("operationInfo"); } if (string.IsNullOrEmpty(operationInfo.Name)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("operationInfo", SR2.GetString(SR2.Error_OperationNameNotSpecified)); } this.declaringType = declaringType; this.name = operationInfo.Name; this.methodAttributes = MethodAttributes.Public | MethodAttributes.Abstract | MethodAttributes.Virtual; SortedList <int, ContractMethodParameterInfo> localParameters = new SortedList <int, ContractMethodParameterInfo>(); foreach (OperationParameterInfo operationParameterInfo in operationInfo.Parameters) { ContractMethodParameterInfo parameterInfo = new ContractMethodParameterInfo(this, operationParameterInfo); if (parameterInfo.Position == -1) { this.returnParam = parameterInfo; } else { localParameters.Add(parameterInfo.Position, parameterInfo); } } this.parameters = new ParameterInfo[localParameters.Count]; foreach (ContractMethodParameterInfo paramInfo in localParameters.Values) { this.parameters[paramInfo.Position] = paramInfo; } if (this.returnParam == null) { OperationParameterInfo returnParameterInfo = new OperationParameterInfo(); returnParameterInfo.Position = -1; returnParameterInfo.ParameterType = typeof(void); this.returnParam = new ContractMethodParameterInfo(this, returnParameterInfo); } OperationContractAttribute operationContract = new OperationContractAttribute(); if (operationInfo.HasProtectionLevel && operationInfo.ProtectionLevel != null) { operationContract.ProtectionLevel = (ProtectionLevel)operationInfo.ProtectionLevel; } operationContract.IsOneWay = operationInfo.IsOneWay; this.attributes = new Attribute[] { operationContract }; declaringType.AddMethod(this); }