ResolveObjectCreation() public method

Resolves an object creation.
public ResolveObjectCreation ( IType type, ResolveResult arguments, string argumentNames = null, bool allowProtectedAccess = false, IList initializerStatements = null ) : ResolveResult
type IType Type of the object to create.
arguments ResolveResult /// Arguments passed to the constructor. /// The resolver may mutate this array to wrap elements in s! ///
argumentNames string /// The argument names. Pass the null string for positional arguments. ///
allowProtectedAccess bool /// Whether to allow calling protected constructors. /// This should be false except when resolving constructor initializers. ///
initializerStatements IList /// Statements for Objects/Collections initializer. /// ///
return ResolveResult
Example #1
0
		public IMethod ResolveConstructor(ITypeResolveContext context)
		{
			CSharpResolver r = new CSharpResolver(context);
			IType type = attributeType.Resolve(context);
			int totalArgumentCount = 0;
			if (positionalArguments != null)
				totalArgumentCount += positionalArguments.Count;
			if (namedCtorArguments != null)
				totalArgumentCount += namedCtorArguments.Count;
			ResolveResult[] arguments = new ResolveResult[totalArgumentCount];
			string[] argumentNames = new string[totalArgumentCount];
			int i = 0;
			if (positionalArguments != null) {
				while (i < positionalArguments.Count) {
					IConstantValue cv = positionalArguments[i];
					arguments[i] = new ConstantResolveResult(cv.GetValueType(context), cv.GetValue(context));
					i++;
				}
			}
			if (namedCtorArguments != null) {
				foreach (var pair in namedCtorArguments) {
					argumentNames[i] = pair.Key;
					arguments[i] = new ConstantResolveResult(pair.Value.GetValueType(context), pair.Value.GetValue(context));
					i++;
				}
			}
			MemberResolveResult mrr = r.ResolveObjectCreation(type, arguments, argumentNames) as MemberResolveResult;
			return mrr != null ? mrr.Member as IMethod : null;
		}
Example #2
0
        public IMethod ResolveConstructor(ITypeResolveContext context)
        {
            CSharpResolver r    = new CSharpResolver(context);
            IType          type = attributeType.Resolve(context);
            int            totalArgumentCount = 0;

            if (positionalArguments != null)
            {
                totalArgumentCount += positionalArguments.Count;
            }
            if (namedCtorArguments != null)
            {
                totalArgumentCount += namedCtorArguments.Count;
            }
            ResolveResult[] arguments     = new ResolveResult[totalArgumentCount];
            string[]        argumentNames = new string[totalArgumentCount];
            int             i             = 0;

            if (positionalArguments != null)
            {
                while (i < positionalArguments.Count)
                {
                    IConstantValue cv = positionalArguments[i];
                    arguments[i] = new ConstantResolveResult(cv.GetValueType(context), cv.GetValue(context));
                    i++;
                }
            }
            if (namedCtorArguments != null)
            {
                foreach (var pair in namedCtorArguments)
                {
                    argumentNames[i] = pair.Key;
                    arguments[i]     = new ConstantResolveResult(pair.Value.GetValueType(context), pair.Value.GetValue(context));
                    i++;
                }
            }
            MemberResolveResult mrr = r.ResolveObjectCreation(type, arguments, argumentNames) as MemberResolveResult;

            return(mrr != null ? mrr.Member as IMethod : null);
        }
Example #3
0
			InvocationResolveResult GetCtorInvocation()
			{
				ResolveResult rr = LazyInit.VolatileRead(ref this.ctorInvocation);
				if (rr != null) {
					return rr as InvocationResolveResult;
				} else {
					CSharpResolver resolver = new CSharpResolver(context);
					int totalArgumentCount = unresolved.positionalArguments.Count + unresolved.namedCtorArguments.Count;
					ResolveResult[] arguments = new ResolveResult[totalArgumentCount];
					string[] argumentNames = new string[totalArgumentCount];
					int i = 0;
					while (i < unresolved.positionalArguments.Count) {
						IConstantValue cv = unresolved.positionalArguments[i];
						arguments[i] = cv.Resolve(context);
						i++;
					}
					foreach (var pair in unresolved.namedCtorArguments) {
						argumentNames[i] = pair.Key;
						arguments[i] = pair.Value.Resolve(context);
						i++;
					}
					rr = resolver.ResolveObjectCreation(attributeType, arguments, argumentNames);
					return LazyInit.GetOrSet(ref this.ctorInvocation, rr) as InvocationResolveResult;
				}
			}