From 72b685da0fee98f7341ab4861acac8f09ff35131 Mon Sep 17 00:00:00 2001 From: Mikayla Hutchinson Date: Mon, 2 Oct 2023 00:52:22 -0400 Subject: [PATCH] Fix empty item metadata overwriting encoded value --- Mono.TextTemplating.Build/TextTransform.cs | 31 ++++++++++++++++------ 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/Mono.TextTemplating.Build/TextTransform.cs b/Mono.TextTemplating.Build/TextTransform.cs index 6137d12..65e5e9e 100644 --- a/Mono.TextTemplating.Build/TextTransform.cs +++ b/Mono.TextTemplating.Build/TextTransform.cs @@ -116,8 +116,8 @@ public override bool Execute () buildState.TransformTemplates = new List (); foreach (var tt in TransformTemplates) { //TODO: OutputFilePath, OutputFileName - //var outputFilePathMetadata = tt.GetMetadata("OutputFilePath"); - //var outputFileNameMetadata = tt.GetMetadata("OutputFileName"); + //var outputFilePathMetadata = tt.TryGetMetadata("OutputFilePath"); + //var outputFileNameMetadata = tt.TryGetMetadata("OutputFileName"); string inputFile = tt.ItemSpec; string outputFile = Path.ChangeExtension (inputFile, ".txt"); buildState.TransformTemplates.Add (new TemplateBuildState.TransformTemplate { @@ -175,15 +175,15 @@ bool AddParameters (TemplateBuildState buildState) } // metadata overrides encoded values. todo: warn when this happens? - if (par.GetMetadata ("Value") is string valueMetadata) { + if (par.TryGetMetadata ("Value", out string valueMetadata)) { paramVal = valueMetadata; } - if (par.GetMetadata ("Processor") is string processorMetadata) { + if (par.TryGetMetadata ("Processor", out string processorMetadata)) { processorName = processorMetadata; } - if (par.GetMetadata ("Directive") is string directiveMetadata) { + if (par.TryGetMetadata ("Directive", out string directiveMetadata)) { directiveName = directiveMetadata; } @@ -231,15 +231,15 @@ bool AddDirectiveProcessors (TemplateBuildState buildState) assembly = split[2]; } - if (dirItem.GetMetadata ("Class") is string classMetadata) { + if (dirItem.TryGetMetadata ("Class", out string classMetadata)) { className = classMetadata; } - if (dirItem.GetMetadata ("Codebase") is string codebaseMetadata) { + if (dirItem.TryGetMetadata ("Codebase", out string codebaseMetadata)) { assembly = codebaseMetadata; } - if (dirItem.GetMetadata ("Assembly") is string assemblyMetadata) { + if (dirItem.TryGetMetadata ("Assembly", out string assemblyMetadata)) { assembly = assemblyMetadata; } @@ -311,4 +311,19 @@ void SaveBuildState (TemplateBuildState buildState, string filePath, MessagePack } } } + + static class TaskItemExtensions + { + public static bool TryGetMetadata (this ITaskItem item, string name, out string value) + { + var potentialValue = item.GetMetadata (name); + if (potentialValue?.Length > 0) { + value = potentialValue; + return true; + } + + value = null; + return false; + } + } }