Exemple #1
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 = GetType(targetRR);
            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)));
                            }
                        }
                    }
                }

                var memberRR = 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."
                                                      );

//				MethodGroupResolveResult mgRR = memberRR as MethodGroupResolveResult;
//
//				if (mgRR == null)
//					mgRR = targetRR as MethodGroupResolveResult;
//
//				if (mgRR != null && !resolver.allowMethodGroupResolveResult)
//					return CreateMemberResolveResult(mgRR.GetMethodWithEmptyParameterList());

                return(memberRR);
            }
            return(null);
        }
Exemple #2
0
 IReturnType ResolveType(TypeReference typeRef)
 {
     return(TypeVisitor.CreateReturnType(typeRef, resolver));
 }
Exemple #3
0
 ResolveResult CreateResolveResult(TypeReference reference)
 {
     return(CreateResolveResult(TypeVisitor.CreateReturnType(reference, resolver)));
 }