Exemplo n.º 1
0
		static IReturnType Resolve(this PropertyPathSegment segment, XamlCompletionContext context, IReturnType previousType)
		{
			if (segment.Kind == SegmentKind.SourceTraversal)
				return previousType;
			if (segment.Kind == SegmentKind.ControlChar)
				return previousType;
			
			string content = segment.Content;
			
			if (segment.Kind == SegmentKind.AttachedProperty && content.StartsWith("(")) {
				content = content.TrimStart('(');
				if (content.Contains("."))
					content = content.Remove(content.IndexOf('.'));
			}
			
			XamlContextDescription tmp = context.Description;
			context.Description = XamlContextDescription.InTag;
			
			ResolveResult rr = XamlResolver.Resolve(content, context);
			IReturnType type = null;
			
			if (rr is TypeResolveResult)
				type = (rr as TypeResolveResult).ResolvedType;

			if (previousType != null) {
				IMember member = previousType.GetMemberByName(content);
				if (member != null)
					type = member.ReturnType;
			} else {
				if (rr is MemberResolveResult) {
					MemberResolveResult mrr = rr as MemberResolveResult;
					if (mrr.ResolvedMember != null)
						type = mrr.ResolvedMember.ReturnType;
				}
				if (rr is TypeResolveResult)
					type = (rr as TypeResolveResult).ResolvedType;
			}
			
			context.Description = tmp;
			return type;
		}