private void ProcessMethod()

in SharpGen/Transform/MethodTransform.cs [119:159]


        private void ProcessMethod(CsCallable method)
        {
            var cppMethod = (CppCallable)method.CppElement;

            // For methods, the tag "type" is only used for return type
            // So we are overriding the return type here
            var methodRule = cppMethod.Rule;
            if (methodRule.MappingType != null)
                cppMethod.ReturnValue.Rule.MappingType = methodRule.MappingType;

            // Get the inferred return type
            method.ReturnValue = factory.Create(cppMethod.ReturnValue);

            var parameters = cppMethod.Parameters.ToArray();
            var parameterNames = NamingRules.Rename(parameters);

            Debug.Assert(parameters.Length == parameterNames.Count);

            uint? outCount = 0;

            // Iterates on parameters to convert them to C# parameters
            for (var index = 0; index < parameters.Length; index++)
            {
                var cppParameter = parameters[index];
                var parameterName = parameterNames[index];
                var csParameter = factory.Create(cppParameter, parameterName);
                method.Add(csParameter);

                if (!outCount.HasValue)
                    continue;

                if (csParameter.IsOut && csParameter.Relations.Count == 0)
                    ++outCount;

                if (cppParameter.Rule.ParameterUsedAsReturnType == false)
                    outCount = null;
            }

            if (outCount == 1)
                TransformOutParametersToReturnValues(method);
        }