Exemple #1
0
        private void BuildOperatorTypedArguments()
        {
            var method = OperatorResolveResult.UserDefinedOperatorMethod;

            if (method != null)
            {
                for (int i = 0; i < method.TypeArguments.Count; i++)
                {
                    TypeArguments[i] = new TypeParamExpression(method.TypeParameters[i].Name, null, method.TypeArguments[i]);
                }
            }
        }
Exemple #2
0
        private void BuildTypedArguments(Expression expression)
        {
            AstNodeCollection <AstType> typedArguments = null;

            if (expression is IdentifierExpression identifierExpression)
            {
                typedArguments = identifierExpression.TypeArguments;
            }
            else
            {
                if (expression is MemberReferenceExpression memberRefExpression)
                {
                    typedArguments = memberRefExpression.TypeArguments;
                }
            }


            if (ResolveResult.Member is IMethod method)
            {
                TypeArguments = new TypeParamExpression[method.TypeParameters.Count];

                if (typedArguments != null && typedArguments.Count == method.TypeParameters.Count)
                {
                    var list = typedArguments.ToList();
                    for (int i = 0; i < list.Count; i++)
                    {
                        TypeArguments[i] = new TypeParamExpression(method.TypeParameters[i].Name, list[i], null);
                    }
                }
                else
                {
                    for (int i = 0; i < method.TypeArguments.Count; i++)
                    {
                        TypeArguments[i] = new TypeParamExpression(method.TypeParameters[i].Name, null, method.TypeArguments[i]);
                    }
                }

                if (method.DeclaringType != null && method.DeclaringTypeDefinition != null && method.DeclaringTypeDefinition.TypeParameters.Count > 0)
                {
                    var typeParams = method.DeclaringTypeDefinition.TypeParameters;
                    var typeArgs   = method.DeclaringType.TypeArguments;
                    var temp       = new TypeParamExpression[typeParams.Count];

                    for (int i = 0; i < typeParams.Count; i++)
                    {
                        temp[i] = new TypeParamExpression(typeParams[i].Name, null, typeArgs[i], true);
                    }

                    TypeArguments = TypeArguments.Concat(temp).ToArray();
                }
            }
        }
Exemple #3
0
        private void BuildTypedArguments(IMember member)
        {
            var typeParams = member.DeclaringTypeDefinition.TypeParameters;
            var typeArgs   = member.DeclaringType.TypeArguments;
            var temp       = new TypeParamExpression[typeParams.Count];

            for (int i = 0; i < typeParams.Count; i++)
            {
                temp[i] = new TypeParamExpression(typeParams[i].Name, null, typeArgs[i], true);
            }

            TypeArguments = temp;
        }
Exemple #4
0
        private void BuildTypedArguments(AstType type)
        {
            if (type is SimpleType simpleType)
            {
                AstNodeCollection <AstType> typedArguments = simpleType.TypeArguments;
                IList <ITypeParameter>      typeParams     = null;

                if (ResolveResult.Member.DeclaringTypeDefinition != null)
                {
                    typeParams = ResolveResult.Member.DeclaringTypeDefinition.TypeParameters;
                }
                else if (ResolveResult.Member is SpecializedMethod)
                {
                    typeParams = ((SpecializedMethod)ResolveResult.Member).TypeParameters;
                }

                TypeArguments = new TypeParamExpression[typedArguments.Count];
                var list = typedArguments.ToList();
                for (int i = 0; i < list.Count; i++)
                {
                    TypeArguments[i] = new TypeParamExpression(typeParams[i].Name, list[i], null);
                }
            }
        }