ParameterDefinitionCollection CloneParameterCollection(ParameterDefinitionCollection original)
        {
            ParameterDefinitionCollection clone = new ParameterDefinitionCollection(
                original.Container);

            foreach (ParameterDefinition param in original)
            {
                clone.Add(param);
            }
            return(clone);
        }
예제 #2
0
        private MethodReference ImportMethod(MethodReference method, ImportGenericContext context)
        {
            if (method.IsGenericInstance)
            {
                return(ImportMethodSpecification(method, context));
            }
            TypeReference   declaringType   = ImportType(method.DeclaringType, context);
            MethodReference methodReference = new MethodReference
            {
                Name              = method.Name,
                HasThis           = method.HasThis,
                ExplicitThis      = method.ExplicitThis,
                DeclaringType     = declaringType,
                CallingConvention = method.CallingConvention
            };

            if (method.HasGenericParameters)
            {
                ImportGenericParameters(methodReference, method);
            }
            context.Push(methodReference);
            try
            {
                methodReference.ReturnType = ImportType(method.ReturnType, context);
                if (!method.HasParameters)
                {
                    return(methodReference);
                }
                Collection <ParameterDefinition> parameters = method.Parameters;
                ParameterDefinitionCollection    parameterDefinitionCollection = methodReference.parameters = new ParameterDefinitionCollection(methodReference, parameters.Count);
                for (int i = 0; i < parameters.Count; i++)
                {
                    parameterDefinitionCollection.Add(new ParameterDefinition(ImportType(parameters[i].ParameterType, context)));
                }
                return(methodReference);
            }
            finally
            {
                context.Pop();
            }
        }
		ParameterDefinitionCollection CloneParameterCollection (ParameterDefinitionCollection original)
		{
			ParameterDefinitionCollection clone = new ParameterDefinitionCollection (
				original.Container);
			foreach (ParameterDefinition param in original)
				clone.Add (param);
			return clone;
		}
예제 #4
0
        private void AddParameters(MethodDefinition getterInfo, MethodDefinition setterInfo)
        {
            ParameterDefinitionCollection propParameters = null;

            if (getterInfo != null)
            {
                propParameters = getterInfo.Parameters;
            }
            else if (setterInfo != null)
            {
                ParameterDefinitionCollection tmpParameters = setterInfo.Parameters;

                Debug.Assert(tmpParameters != null && tmpParameters.Count >= 1, "Impossible! Property setter must have at least one parameter.");

                propParameters = new ParameterDefinitionCollection(setterInfo);

                for (int i = 0; i < tmpParameters.Count - 1; i++)
                {
                    propParameters.Add(tmpParameters[i]);
                }
            }
            else
            {
                Debug.Assert(false, "Impossible! Property must have either getter or setter or both.");
            }

            foreach (ParameterDefinition parameterDefinition in propParameters)
            {
                if (parameters.ContainsKey(parameterDefinition.Name))
                {
                    Logger.Warning("Properties can't have more than one parameter with the same name.");
                    return;
                }

                parametersNames.Add(parameterDefinition.Name);
                parameters.Add(parameterDefinition.Name, new MyParameterInfo(parameterDefinition));
            }
        }