static IReturnType CreateReturnType(NRefactoryAST.TypeReference reference, IMethod method, IClass currentClass, ICompilationUnit cu, TypeVisitor.ReturnTypeOptions options) { if (currentClass == null) { return TypeVisitor.CreateReturnType(reference, new DefaultClass(cu, "___DummyClass"), method, 1, 1, cu.ProjectContent, options | TypeVisitor.ReturnTypeOptions.Lazy); } else { return TypeVisitor.CreateReturnType(reference, currentClass, method, currentClass.Region.BeginLine + 1, 1, cu.ProjectContent, options | TypeVisitor.ReturnTypeOptions.Lazy); } }
IReturnType CreateReturnType(NRefactoryAST.TypeReference reference, IMethod method, TypeVisitor.ReturnTypeOptions options) { return CreateReturnType(reference, method, GetCurrentClass(), cu, options); }
ResolveResult CreateResolveResult(TypeReference reference) { return(CreateResolveResult(TypeVisitor.CreateReturnType(reference, resolver))); }
IReturnType ResolveType(TypeReference typeRef) { return(TypeVisitor.CreateReturnType(typeRef, resolver)); }
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); }