Exemplo n.º 1
0
 public static IReturnType CreateReturnType(TypeReference reference, NRefactoryResolver resolver)
 {
     return(CreateReturnType(reference,
                             resolver.CallingClass, resolver.CallingMember,
                             resolver.CaretLine, resolver.CaretColumn,
                             resolver.ProjectContent, false));
 }
Exemplo n.º 2
0
        internal InferredReturnType(Expression expression, NRefactoryResolver resolver)
        {
            if (resolver == null)
            {
                throw new ArgumentNullException("resolver");
            }

            _expression = expression;
            _resolver   = resolver;
        }
Exemplo n.º 3
0
        public override object VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, object data)
        {
            IReturnType type;

            if (string.IsNullOrEmpty(memberReferenceExpression.MemberName))
            {
                // NRefactory creates this "dummy" fieldReferenceExpression when it should
                // parse a primitive type name (int, short; Integer, Decimal)
                if (memberReferenceExpression.TargetObject is TypeReferenceExpression)
                {
                    type = TypeVisitor.CreateReturnType(((TypeReferenceExpression)memberReferenceExpression.TargetObject).TypeReference, resolver);
                    return(CreateTypeResolveResult(type));
                }
            }
            ResolveResult targetRR = Resolve(memberReferenceExpression.TargetObject);

            if (targetRR == null)
            {
                return(null);
            }
            type = targetRR.ResolvedType;
            if (targetRR is NamespaceResolveResult)
            {
                return(ResolveMemberInNamespace(((NamespaceResolveResult)targetRR).Name, memberReferenceExpression));
            }
            else if (type != null)
            {
                TypeResolveResult typeRR = targetRR as TypeResolveResult;
                if (typeRR != null && typeRR.ResolvedClass != null)
                {
                    foreach (IClass c1 in typeRR.ResolvedClass.ClassInheritanceTree)
                    {
                        foreach (IClass c in c1.InnerClasses)
                        {
                            if (resolver.IsSameName(memberReferenceExpression.MemberName, c.Name) &&
                                c.TypeParameters.Count == memberReferenceExpression.TypeArguments.Count)
                            {
                                return(CreateTypeResolveResult(resolver.ConstructType(c.DefaultReturnType, memberReferenceExpression.TypeArguments)));
                            }
                        }
                    }
                }
                return(resolver.ResolveMember(type, memberReferenceExpression.MemberName,
                                              memberReferenceExpression.TypeArguments,
                                              NRefactoryResolver.IsInvoked(memberReferenceExpression),
                                              typeRR == null,                                    // allow extension methods only for non-static method calls
                                              targetRR is BaseResolveResult ? (bool?)true : null // allow calling protected members using "base."
                                              ));
            }
            return(null);
        }
Exemplo n.º 4
0
        internal LambdaReturnType(AnonymousMethodExpression expression, NRefactoryResolver resolver)
            : base(resolver.CompilationUnit)
        {
            this.resolver = resolver;

            if (expression.HasParameterList)
            {
                base.MethodParameters = new List <IParameter>();
                foreach (ParameterDeclarationExpression param in expression.Parameters)
                {
                    base.MethodParameters.Add(NRefactoryASTConvertVisitor.CreateParameter(param, resolver.CallingMember as IMethod, resolver.CallingClass, resolver.CompilationUnit));
                }
            }
            expression.Body.AcceptVisitor(new ReturnStatementFinder(returnExpressions), null);
        }
        bool ReplaceWithInvocation(Expression expression, ResolveResult rr)
        {
            // replace with invocation if rr is a method
            // and were not taking the address and it's not already being invoked
            MethodGroupResolveResult mgrr = rr as MethodGroupResolveResult;

            if (mgrr != null &&
                mgrr.Methods.Any(g => g.Count > 0) &&
                !(expression.Parent is AddressOfExpression) &&
                !(NRefactoryResolver.IsInvoked(expression)))
            {
                InvocationExpression ie = new InvocationExpression(expression);
                ReplaceCurrentNode(ie);
                return(true);
            }
            return(false);
        }
Exemplo n.º 6
0
        public override object VisitPointerReferenceExpression(PointerReferenceExpression pointerReferenceExpression, object data)
        {
            ResolveResult targetRR = Resolve(pointerReferenceExpression.TargetObject);

            if (targetRR == null || targetRR.ResolvedType == null)
            {
                return(null);
            }
            PointerReturnType type = targetRR.ResolvedType.CastToDecoratingReturnType <PointerReturnType>();

            if (type != null)
            {
                return(resolver.ResolveMember(type.BaseType, pointerReferenceExpression.MemberName,
                                              pointerReferenceExpression.TypeArguments,
                                              NRefactoryResolver.IsInvoked(pointerReferenceExpression),
                                              true, null
                                              ));
            }
            return(null);
        }
Exemplo n.º 7
0
        internal LambdaReturnType(LambdaExpression expression, NRefactoryResolver resolver)
            : base(resolver.CompilationUnit)
        {
            this.resolver         = resolver;
            this.lambdaExpression = expression;

            base.MethodParameters = new List <IParameter>();
            foreach (ParameterDeclarationExpression param in expression.Parameters)
            {
                base.MethodParameters.Add(NRefactoryASTConvertVisitor.CreateParameter(param, resolver.CallingMember as IMethod, resolver.CallingClass, resolver.CompilationUnit));
            }
            if (expression.ExpressionBody.IsNull)
            {
                expression.StatementBody.AcceptVisitor(new ReturnStatementFinder(returnExpressions), null);
            }
            else
            {
                returnExpressions.Add(expression.ExpressionBody);
            }
        }
Exemplo n.º 8
0
 public LambdaParameterReturnType(LambdaExpression lambda, string name, NRefactoryResolver resolver)
 {
     if (lambda == null)
     {
         throw new ArgumentNullException("lambda");
     }
     if (name == null)
     {
         throw new ArgumentNullException("name");
     }
     if (resolver == null)
     {
         throw new ArgumentNullException("resolver");
     }
     this.lambda         = lambda;
     this.parameterName  = name;
     this.parameterIndex = lambda.Parameters.FindIndex(p => p.ParameterName == name);
     this.resolver       = resolver;
     if (parameterIndex < 0)
     {
         throw new ArgumentException("there is no lambda parameter with that name");
     }
 }
Exemplo n.º 9
0
 public TypeVisitor(NRefactoryResolver resolver)
 {
     this.resolver = resolver;
 }
 public CSharpToVBNetConvertVisitor(IProjectContent pc, ParseInformation parseInfo)
 {
     this.resolver         = new NRefactoryResolver(LanguageProperties.CSharp);
     this.projectContent   = pc;
     this.parseInformation = parseInfo;
 }