void VisitPureLiteral(ValueInfo info, MSBuildValueKind kind, ExpressionText node) { string value = node.GetUnescapedValue(); rr.ReferenceOffset = node.Offset; rr.ReferenceLength = node.Value.Length; rr.Reference = value; switch (kind) { case MSBuildValueKind.TaskOutputParameterName: rr.ReferenceKind = MSBuildReferenceKind.TaskParameter; return; case MSBuildValueKind.TargetName: rr.ReferenceKind = MSBuildReferenceKind.Target; return; case MSBuildValueKind.NuGetID: rr.ReferenceKind = MSBuildReferenceKind.NuGetID; return; case MSBuildValueKind.PropertyName: rr.ReferenceKind = MSBuildReferenceKind.Property; return; case MSBuildValueKind.ItemName: rr.ReferenceKind = MSBuildReferenceKind.Item; return; case MSBuildValueKind.TargetFramework: rr.ReferenceKind = MSBuildReferenceKind.TargetFramework; return; case MSBuildValueKind.TargetFrameworkIdentifier: rr.ReferenceKind = MSBuildReferenceKind.TargetFrameworkIdentifier; return; case MSBuildValueKind.TargetFrameworkVersion: rr.ReferenceKind = MSBuildReferenceKind.TargetFrameworkVersion; return; case MSBuildValueKind.TargetFrameworkProfile: rr.ReferenceKind = MSBuildReferenceKind.TargetFrameworkProfile; return; } IReadOnlyList <ConstantInfo> knownVals = info.Values ?? kind.GetSimpleValues(false); if (knownVals != null && knownVals.Count != 0) { foreach (var kv in knownVals) { if (string.Equals(kv.Name, value, StringComparison.OrdinalIgnoreCase)) { rr.ReferenceKind = MSBuildReferenceKind.KnownValue; rr.Reference = kv; return; } } } }
void VisitPureLiteral(XElement element, ValueInfo info, MSBuildValueKind kind, ExpressionText node) { string value = node.GetUnescapedValue(); rr.ReferenceOffset = node.Offset; rr.ReferenceLength = node.Value.Length; rr.Reference = value; switch (kind) { case MSBuildValueKind.TaskOutputParameterName: rr.ReferenceKind = MSBuildReferenceKind.TaskParameter; return; case MSBuildValueKind.TargetName: rr.ReferenceKind = MSBuildReferenceKind.Target; return; case MSBuildValueKind.NuGetID: rr.ReferenceKind = MSBuildReferenceKind.NuGetID; return; case MSBuildValueKind.PropertyName: rr.ReferenceKind = MSBuildReferenceKind.Property; return; case MSBuildValueKind.ItemName: rr.ReferenceKind = MSBuildReferenceKind.Item; return; case MSBuildValueKind.TaskName: rr.ReferenceKind = MSBuildReferenceKind.Task; return; case MSBuildValueKind.TargetFramework: rr.ReferenceKind = MSBuildReferenceKind.TargetFramework; return; case MSBuildValueKind.TargetFrameworkIdentifier: rr.ReferenceKind = MSBuildReferenceKind.TargetFrameworkIdentifier; return; case MSBuildValueKind.TargetFrameworkVersion: rr.ReferenceKind = MSBuildReferenceKind.TargetFrameworkVersion; return; case MSBuildValueKind.TargetFrameworkProfile: rr.ReferenceKind = MSBuildReferenceKind.TargetFrameworkProfile; return; case MSBuildValueKind.MetadataName: //this is used for KeepMetadata/RemoveMetadata. //reasonable to resolve from first item in include. var itemName = MSBuildMetadataReferenceCollector.GetIncludeExpression(element, TextDocument) .WithAllDescendants() .OfType <ExpressionItemName> () .FirstOrDefault(); if (itemName != null) { rr.Reference = (itemName.Name, value); rr.ReferenceKind = MSBuildReferenceKind.Metadata; } return; } IReadOnlyList <ConstantInfo> knownVals = info.Values ?? kind.GetSimpleValues(false); if (knownVals != null && knownVals.Count != 0) { foreach (var kv in knownVals) { if (string.Equals(kv.Name, value, StringComparison.OrdinalIgnoreCase)) { rr.ReferenceKind = MSBuildReferenceKind.KnownValue; rr.Reference = kv; return; } } } }