bool DoStaticExtensionCompletion(XamlCompletionItemList list, XamlCompletionContext context) { AttributeValue selItem = Utils.GetMarkupExtensionAtPosition(context.AttributeValue.ExtensionValue, context.ValueStartOffset) .PositionalArguments.LastOrDefault(); var resolver = new XamlResolver(compilation); if (context.PressedKey == '.') { if (selItem != null && selItem.IsString) { var rr = resolver.ResolveAttributeValue(selItem.StringValue, context) as TypeResolveResult; if (rr != null) { list.Items.AddRange(MemberCompletion(context, rr.Type, string.Empty)); } return(false); } } else { if (selItem != null && selItem.IsString) { int index = selItem.StringValue.IndexOf('.'); string s = (index > -1) ? selItem.StringValue.Substring(0, index) : selItem.StringValue; var rr = resolver.ResolveAttributeValue(s, context) as TypeResolveResult; if (rr != null && rr.Type.Kind != TypeKind.Unknown) { list.Items.AddRange(MemberCompletion(context, rr.Type, (index == -1) ? "." : string.Empty)); list.PreselectionLength = (index > -1) ? selItem.StringValue.Length - index - 1 : 0; return(false); } else { DoStaticTypeCompletion(selItem, list, context); } } else { DoStaticTypeCompletion(selItem, list, context); } } return(true); }
IType GetType(XamlContext context, out bool isExplicit) { string targetTypeValue = Utils.LookForTargetTypeValue(context, out isExplicit, "Trigger", "Setter"); AttributeValue value = MarkupExtensionParser.ParseValue(targetTypeValue ?? string.Empty); XamlResolver resolver = new XamlResolver(compilation); return(resolver.ResolveAttributeValue(context, value).Type); }
void DoTriggerCompletion(XamlCompletionContext context, XamlCompletionItemList completionList) { bool isExplicit; AttributeValue value = MarkupExtensionParser.ParseValue(Utils.LookForTargetTypeValue(context, out isExplicit, "Trigger") ?? string.Empty); string typeNameString; var rr = resolver.ResolveAttributeValue(context, value, out typeNameString); var typeName = rr.Type; if (typeName != null) { switch (context.Attribute.Name) { case "Value": AttributeValue propType = MarkupExtensionParser.ParseValue(context.ActiveElement.GetAttributeValue("Property") ?? ""); if (!propType.IsString) { break; } string name = propType.StringValue; if (!name.Contains(".")) { name = typeNameString + "." + name; } context.Description = XamlContextDescription.AtTag; var mrr = resolver.ResolveExpression(name, context) as MemberResolveResult; if (mrr == null || mrr.Member == null) { break; } completionList.Items.AddRange( generator.MemberCompletion(context, mrr.Member.ReturnType, string.Empty) ); break; } } }
void DoNamedArgsCompletion(XamlCompletionItemList list, XamlCompletionContext context, IType type, MarkupExtensionInfo markup) { if (markup.NamedArguments.Count > 0 && !context.Editor.GetWordBeforeCaret().StartsWith(",", StringComparison.OrdinalIgnoreCase)) { int lastStart = markup.NamedArguments.Max(i => i.Value.StartOffset); var item = markup.NamedArguments.First(p => p.Value.StartOffset == lastStart); if (context.RawAttributeValue.EndsWith("=", StringComparison.OrdinalIgnoreCase) || (item.Value.IsString && item.Value.StringValue.EndsWith(context.Editor.GetWordBeforeCaretExtended(), StringComparison.Ordinal))) { var resolver = new XamlResolver(compilation); MemberResolveResult mrr = resolver.ResolveAttributeValue(item.Key, context) as MemberResolveResult; if (mrr != null && mrr.Member != null && mrr.Member.ReturnType != null) { IType memberType = mrr.Member.ReturnType; list.Items.AddRange(MemberCompletion(context, memberType, string.Empty)); } return; } } list.Items.AddRange(type.GetProperties().Where(p => p.CanSet && p.IsPublic).Select(p => new XamlCompletionItem(p.Name + "=", p))); }
IType GetType(XamlContext context, out bool isExplicit) { string targetTypeValue = Utils.LookForTargetTypeValue(context, out isExplicit, "Trigger", "Setter"); AttributeValue value = MarkupExtensionParser.ParseValue(targetTypeValue ?? string.Empty); XamlResolver resolver = new XamlResolver(compilation); return resolver.ResolveAttributeValue(context, value).Type; }
bool DoStaticExtensionCompletion(XamlCompletionItemList list, XamlCompletionContext context) { AttributeValue selItem = Utils.GetMarkupExtensionAtPosition(context.AttributeValue.ExtensionValue, context.ValueStartOffset) .PositionalArguments.LastOrDefault(); var resolver = new XamlResolver(compilation); if (context.PressedKey == '.') { if (selItem != null && selItem.IsString) { var rr = resolver.ResolveAttributeValue(selItem.StringValue, context) as TypeResolveResult; if (rr != null) list.Items.AddRange(MemberCompletion(context, rr.Type, string.Empty)); return false; } } else { if (selItem != null && selItem.IsString) { int index = selItem.StringValue.IndexOf('.'); string s = (index > -1) ? selItem.StringValue.Substring(0, index) : selItem.StringValue; var rr = resolver.ResolveAttributeValue(s, context) as TypeResolveResult; if (rr != null && rr.Type.Kind != TypeKind.Unknown) { list.Items.AddRange(MemberCompletion(context, rr.Type, (index == -1) ? "." : string.Empty)); list.PreselectionLength = (index > -1) ? selItem.StringValue.Length - index - 1 : 0; return false; } else DoStaticTypeCompletion(selItem, list, context); } else { DoStaticTypeCompletion(selItem, list, context); } } return true; }