void VisitElementValue(XElement element, MSBuildLanguageElement resolved) { if (element.FirstChild != null || resolved.ValueKind == MSBuildValueKind.Data || resolved.ValueKind == MSBuildValueKind.Nothing) { return; } if (element.IsSelfClosing || !(element.ClosingTag is XClosingTag closing)) { return; } var begin = element.Span.End; int end = element.ClosingTag.Span.Start; var value = TextSource.GetTextBetween(begin, end); var info = Document.GetSchemas().GetElementInfo(resolved, (element.Parent as XElement)?.Name.Name, element.Name.Name, true); if (info == null) { return; } VisitValue(element, null, resolved, null, info, value, begin); }
void VisitElementValue(XElement element, MSBuildLanguageElement resolved) { if (element.IsSelfClosing || !element.IsEnded) { return; } var begin = element.Span.End; int end = begin; if (element.IsClosed && element.FirstChild == null) { end = element.ClosingTag.Span.Start; } else { //HACK: in some cases GetCharAt can throw at the end of the document even with TextDocument.Length check try { for (; end < (TextSource.Length + 1) && TextSource.GetCharAt(end) != '<'; end++) { } } catch { end--; } } var text = TextSource.GetTextBetween(begin, end); VisitElementValue(element, resolved, text, begin); }
void VisitElementValue(XElement element, MSBuildElementSyntax resolved) { if (element.IsSelfClosing || !element.IsEnded) { return; } //FIXME: handle case with multiple text nodes with comments between them string value = string.Empty; var begin = element.Span.End; var textNode = element.Nodes.OfType <XText> ().FirstOrDefault(); if (textNode != null) { begin = textNode.Span.Start; value = TextSource.GetTextBetween(begin, textNode.Span.End); } VisitElementValue(element, resolved, value, begin); }