diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateResourceDesigner.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateResourceDesigner.cs index 64f6f04bb07..fa7b09c5288 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateResourceDesigner.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateResourceDesigner.cs @@ -86,6 +86,9 @@ public override bool RunTask () var parser = new ManagedResourceParser () { Log = Log, JavaPlatformDirectory = javaPlatformDirectory, ResourceFlagFile = ResourceFlagFile }; resources = parser.Parse (ResourceDirectory, RTxtFile ?? string.Empty, AdditionalResourceDirectories?.Select (x => x.ItemSpec), IsApplication, resource_fixup); } else { + if (JavaResgenInputFile == null) { + throw new ArgumentNullException (nameof (JavaResgenInputFile)); + } var parser = new JavaResourceParser () { Log = Log }; resources = parser.Parse (JavaResgenInputFile, IsApplication, resource_fixup); } diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateRtxt.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateRtxt.cs index b0634082a8f..ec60bbb2d1f 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateRtxt.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateRtxt.cs @@ -34,7 +34,7 @@ public override bool RunTask () var javaPlatformDirectory = JavaPlatformJarPath.IsNullOrEmpty () ? "" : Path.GetDirectoryName (JavaPlatformJarPath); var parser = new FileResourceParser () { Log = Log, JavaPlatformDirectory = javaPlatformDirectory, ResourceFlagFile = ResourceFlagFile}; - var resources = parser.Parse (ResourceDirectory, AdditionalResourceDirectories, AarLibraries, resource_fixup); + var resources = parser.Parse (ResourceDirectory, AdditionalResourceDirectories ?? [], AarLibraries ?? [], resource_fixup); // only update if it changed. writer.Write (RTxtFile, resources); diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/ACWMapGenerator.cs b/src/Xamarin.Android.Build.Tasks/Utilities/ACWMapGenerator.cs index 6821c84446c..7add9c87a11 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/ACWMapGenerator.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/ACWMapGenerator.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.IO; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/Aapt2Daemon.cs b/src/Xamarin.Android.Build.Tasks/Utilities/Aapt2Daemon.cs index dd6b7b809b7..ab0c8fd888c 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/Aapt2Daemon.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/Aapt2Daemon.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -252,7 +253,7 @@ private void Aapt2DaemonStart () } // wait for the file we expect to be created. There can be a delay between // the daemon saying "Done" and the file finally being written to disk. - if (!string.IsNullOrEmpty (job.OutputFile) && !errored) { + if (!job.OutputFile.IsNullOrEmpty () && !errored) { while (!File.Exists (job.OutputFile)) { // If either the AsyncTask.CancellationToken or tcs.Token are cancelled, we need to abort tcs.Token.ThrowIfCancellationRequested (); diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/AndroidResource.cs b/src/Xamarin.Android.Build.Tasks/Utilities/AndroidResource.cs index cba751370b7..cf219652841 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/AndroidResource.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/AndroidResource.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.Diagnostics; @@ -91,7 +92,7 @@ static bool ResourceNeedsToBeLowerCased (string? value, string? resourceBasePath // path to the msbuild's intermediate output directory and that location can be changed by the // user. It's better to be safe than sorry. resourceBasePath = resourceBasePath?.Trim (); - if (string.IsNullOrEmpty (resourceBasePath)) + if (resourceBasePath.IsNullOrEmpty ()) return true; // Avoid resource names that are all whitespace @@ -159,7 +160,7 @@ private static void TryFixResourceAlias (XElement elem, string? resourceBasePath // @layout/Page1 // @drawable/Page1 // and corrects the alias to be lower case. - if (elem.Name == "item" && !string.IsNullOrEmpty(elem.Value) ) { + if (elem.Name == "item" && !elem.Value.IsNullOrEmpty() ) { string value = elem.Value.Trim(); Match m = r.Match (value); if (m.Success) { diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/AndroidRuntime.cs b/src/Xamarin.Android.Build.Tasks/Utilities/AndroidRuntime.cs index f487869025e..2e2fa66709f 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/AndroidRuntime.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/AndroidRuntime.cs @@ -1,3 +1,4 @@ +#nullable enable namespace Xamarin.Android.Tasks; public enum AndroidRuntime diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfig.cs b/src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfig.cs index 40ea29ee665..6b6cc92b545 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfig.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfig.cs @@ -1,3 +1,4 @@ +#nullable enable using System; namespace Xamarin.Android.Tasks diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfigCLR.cs b/src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfigCLR.cs index 0efed3ccc3c..b48178218f1 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfigCLR.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfigCLR.cs @@ -1,3 +1,4 @@ +#nullable enable using System; namespace Xamarin.Android.Tasks; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyCompression.cs b/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyCompression.cs index 9ef32a4dcb8..fd3d4fc1e56 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyCompression.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyCompression.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.Buffers; @@ -37,7 +38,7 @@ public AssemblyData (string sourcePath, uint descriptorIndex) public void SetData (string sourcePath, uint descriptorIndex) { - if (String.IsNullOrEmpty (sourcePath)) + if (sourcePath.IsNullOrEmpty ()) throw new ArgumentException ("must not be null or empty", nameof (sourcePath)); SourcePath = sourcePath; DescriptorIndex = descriptorIndex; @@ -62,7 +63,7 @@ static CompressionResult Compress (AssemblyData data, string outputFilePath) var outputDirectory = Path.GetDirectoryName (outputFilePath); - if (String.IsNullOrEmpty (outputDirectory)) + if (outputDirectory.IsNullOrEmpty ()) throw new ArgumentException ("must not be null or empty", nameof (outputDirectory)); Directory.CreateDirectory (outputDirectory); @@ -172,7 +173,7 @@ static string GetCompressedAssemblyOutputDirectory (ITaskItem assembly, string c string subDirectory = assembly.GetMetadata ("DestinationSubDirectory"); string abi = MonoAndroidHelper.GetAssemblyAbi (assembly); - if (!string.IsNullOrEmpty (subDirectory) && !(subDirectory.EndsWith ($"{abi}/", StringComparison.Ordinal) || subDirectory.EndsWith ($"{abi}\\", StringComparison.Ordinal))) { + if (!subDirectory.IsNullOrEmpty () && !(subDirectory.EndsWith ($"{abi}/", StringComparison.Ordinal) || subDirectory.EndsWith ($"{abi}\\", StringComparison.Ordinal))) { assemblyOutputDir = Path.Combine (compressedOutputDir, abi, subDirectory); } else { assemblyOutputDir = Path.Combine (compressedOutputDir, abi); diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyIdentityMap.cs b/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyIdentityMap.cs index 727cdb7741c..08b1822f903 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyIdentityMap.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyIdentityMap.cs @@ -1,4 +1,5 @@ -using System; +#nullable enable +using System; using System.Collections.Generic; using System.IO; using System.Text; @@ -12,7 +13,7 @@ internal class AssemblyIdentityMap public void Load (string mapFile) { map.Clear (); - if (string.IsNullOrWhiteSpace (mapFile) || !File.Exists (mapFile)) + if (mapFile.IsNullOrWhiteSpace () || !File.Exists (mapFile)) return; foreach (var s in File.ReadLines (mapFile)) { if (!map.Contains (s)) diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyPackagingHelper.cs b/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyPackagingHelper.cs index 1599a8e581e..fba7999377d 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyPackagingHelper.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyPackagingHelper.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyPipeline.cs b/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyPipeline.cs index 703b08d19d1..eba39ee60ed 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyPipeline.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyPipeline.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using Java.Interop.Tools.Cecil; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyStoreAssemblyInfo.cs b/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyStoreAssemblyInfo.cs index 37189b143af..590ca553c7d 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyStoreAssemblyInfo.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyStoreAssemblyInfo.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.IO; @@ -39,7 +40,7 @@ public AssemblyStoreAssemblyInfo (string sourceFilePath, ITaskItem assembly, boo string nameNoExt = Path.GetFileNameWithoutExtension (name); string? culture = assembly.GetMetadata ("Culture"); - if (!String.IsNullOrEmpty (culture)) { + if (!culture.IsNullOrEmpty ()) { name = $"{culture}/{name}"; nameNoExt = $"{culture}/{nameNoExt}"; } diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyStoreBuilder.cs b/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyStoreBuilder.cs index 41195075963..2b976876b86 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyStoreBuilder.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyStoreBuilder.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.IO; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyStoreGenerator.Classes.cs b/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyStoreGenerator.Classes.cs index 81567e4ac0f..9df30db6303 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyStoreGenerator.Classes.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyStoreGenerator.Classes.cs @@ -1,3 +1,4 @@ +#nullable enable namespace Xamarin.Android.Tasks; partial class AssemblyStoreGenerator diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyStoreGenerator.cs b/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyStoreGenerator.cs index 067072b7d24..220157b9ec7 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyStoreGenerator.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/AssemblyStoreGenerator.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.IO; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/BundleConfigSplitConfigsChecker.cs b/src/Xamarin.Android.Build.Tasks/Utilities/BundleConfigSplitConfigsChecker.cs index d80cc131bc1..236937a5d70 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/BundleConfigSplitConfigsChecker.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/BundleConfigSplitConfigsChecker.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.IO; @@ -5,6 +6,7 @@ using System.Text.Json; using Microsoft.Build.Utilities; +using Xamarin.Android.Tasks; /// /// When bundle configuration uses standard settings for split configs, the per-ABI library @@ -181,7 +183,7 @@ static void TransitionState (Strings strings, Utf8JsonReader reader, Stack throw new InvalidOperationException ($"Internal error: unsupported state transition to '{need}'") }; - if (!String.IsNullOrEmpty (objectName) && Xamarin.Android.Tasks.MonoAndroidHelper.StringEquals (needName, objectName)) { + if (!objectName.IsNullOrEmpty () && Xamarin.Android.Tasks.MonoAndroidHelper.StringEquals (needName, objectName)) { state.Push (need); } else { state.Push (BundleConfigObject.Other); diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/CecilExtensions.cs b/src/Xamarin.Android.Build.Tasks/Utilities/CecilExtensions.cs index a111a25efc4..aa66e2318c6 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/CecilExtensions.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/CecilExtensions.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/CompressedAssemblyInfo.cs b/src/Xamarin.Android.Build.Tasks/Utilities/CompressedAssemblyInfo.cs index a5aa5f0dcd8..305e3a939db 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/CompressedAssemblyInfo.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/CompressedAssemblyInfo.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.IO; using Microsoft.Build.Framework; @@ -25,7 +26,7 @@ public CompressedAssemblyInfo (uint fileSize, uint descriptorIndex, AndroidTarge public static string GetKey (string projectFullPath) { - if (String.IsNullOrEmpty (projectFullPath)) + if (projectFullPath.IsNullOrEmpty ()) throw new ArgumentException ("must be a non-empty string", nameof (projectFullPath)); return $"{CompressedAssembliesInfoKey}:{projectFullPath}"; @@ -35,7 +36,7 @@ public static string GetDictionaryKey (ITaskItem assembly) { // Prefer %(DestinationSubPath) if set var path = assembly.GetMetadata ("DestinationSubPath"); - if (!string.IsNullOrEmpty (path)) { + if (!path.IsNullOrEmpty ()) { return path; } // MSBuild sometimes only sets %(DestinationSubDirectory) diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/DSOWrapperGenerator.cs b/src/Xamarin.Android.Build.Tasks/Utilities/DSOWrapperGenerator.cs index 3dd7b1863cb..ff584246f61 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/DSOWrapperGenerator.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/DSOWrapperGenerator.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.IO; @@ -61,7 +62,7 @@ public static Config GetConfig (TaskLoggingHelper log, string androidBinUtilsDir foreach (ITaskItem packLibDir in runtimePackLibraryDirs) { string ?packRID = packLibDir.GetMetadata ("RuntimeIdentifier"); - if (String.IsNullOrEmpty (packRID)) { + if (packRID.IsNullOrEmpty ()) { continue; } diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/ELFHelper.cs b/src/Xamarin.Android.Build.Tasks/Utilities/ELFHelper.cs index 1cdc0866de9..94a363f1d0d 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/ELFHelper.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/ELFHelper.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Concurrent; using System.IO; @@ -20,7 +21,7 @@ static class ELFHelper { public static void AssertValidLibraryAlignment (TaskLoggingHelper log, int alignmentInPages, string path, ITaskItem? item) { - if (String.IsNullOrEmpty (path) || !File.Exists (path)) { + if (path.IsNullOrEmpty () || !File.Exists (path)) { return; } @@ -79,22 +80,22 @@ static void AssertValidLibraryAlignment (TaskLoggingHelper log, uint pageSize, s } string? metaValue = item.GetMetadata ("PathInPackage"); - if (String.IsNullOrEmpty (metaValue)) { + if (metaValue.IsNullOrEmpty ()) { metaValue = item.GetMetadata ("OriginalFile"); - if (String.IsNullOrEmpty (metaValue)) { + if (metaValue.IsNullOrEmpty ()) { metaValue = item.ItemSpec; } } string originalFile = metaValue; metaValue = item.GetMetadata ("NuGetPackageId"); - if (String.IsNullOrEmpty (metaValue)) { + if (metaValue.IsNullOrEmpty ()) { return (Unknown, Unknown, originalFile); } string id = metaValue; string version; metaValue = item.GetMetadata ("NuGetPackageVersion"); - if (!String.IsNullOrEmpty (metaValue)) { + if (!metaValue.IsNullOrEmpty ()) { version = metaValue; } else { version = Unknown; @@ -106,7 +107,7 @@ static void AssertValidLibraryAlignment (TaskLoggingHelper log, uint pageSize, s public static bool IsEmptyAOTLibrary (TaskLoggingHelper log, string path) { - if (String.IsNullOrEmpty (path) || !File.Exists (path)) { + if (path.IsNullOrEmpty () || !File.Exists (path)) { return false; } @@ -121,7 +122,7 @@ public static bool IsEmptyAOTLibrary (TaskLoggingHelper log, string path) public static bool ReferencesLibrary (string libraryPath, string referencedLibraryName) { - if (String.IsNullOrEmpty (libraryPath) || !File.Exists (libraryPath)) { + if (libraryPath.IsNullOrEmpty () || !File.Exists (libraryPath)) { return false; } diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/EnvironmentFilesParser.cs b/src/Xamarin.Android.Build.Tasks/Utilities/EnvironmentFilesParser.cs index 3ca6d191584..0aecd7b1434 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/EnvironmentFilesParser.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/EnvironmentFilesParser.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.IO; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/Features.cs b/src/Xamarin.Android.Build.Tasks/Utilities/Features.cs index a8c499a9124..90cb710b5f8 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/Features.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/Features.cs @@ -1,3 +1,4 @@ +#nullable enable namespace Xamarin.Android.Tools { static class Features { diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/FileResourceParser.cs b/src/Xamarin.Android.Build.Tasks/Utilities/FileResourceParser.cs index 293751bda92..6721cbdc3ce 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/FileResourceParser.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/FileResourceParser.cs @@ -1,4 +1,4 @@ -#nullable disable +#nullable enable using System; using System.CodeDom; @@ -20,14 +20,14 @@ namespace Xamarin.Android.Tasks { class FileResourceParser : ResourceParser { - public string JavaPlatformDirectory { get; set; } + public string? JavaPlatformDirectory { get; set; } - public string ResourceFlagFile { get; set; } + public string? ResourceFlagFile { get; set; } Dictionary arrayMapping = new Dictionary (); Dictionary> foofoo = new Dictionary> (); List custom_types = new List (); - XDocument publicXml; + XDocument? publicXml; string[] publicXmlFiles = new string[] { "public.xml", @@ -35,8 +35,8 @@ class FileResourceParser : ResourceParser "public-staging.xml", }; - protected XDocument LoadPublicXml () { - if (string.IsNullOrEmpty (JavaPlatformDirectory)) + protected XDocument? LoadPublicXml () { + if (JavaPlatformDirectory.IsNullOrEmpty ()) return null; string publicXmlPath = Path.Combine (JavaPlatformDirectory, "data", "res", "values"); foreach (var file in publicXmlFiles) { @@ -162,7 +162,7 @@ public IList Parse (string resourceDirectory, IEnumerable additionalR itemid++; r.UpdateId (id); } else { - if (foofoo.ContainsKey (r.Identifier)) { + if (r.Identifier != null && foofoo.ContainsKey (r.Identifier)) { var items = foofoo[r.Identifier]; if (r.Ids != null) { // do something special cos its an array we need to replace *some* its. @@ -214,7 +214,7 @@ void ProcessResourceFile (string file, Dictionary> resour { Log.LogDebugMessage ($"{nameof(ProcessResourceFile)} {file}"); var fileName = Path.GetFileNameWithoutExtension (file); - if (string.IsNullOrEmpty (fileName)) + if (fileName.IsNullOrEmpty ()) return; if (fileName.EndsWith (".9", StringComparison.OrdinalIgnoreCase)) fileName = Path.GetFileNameWithoutExtension (fileName); @@ -274,7 +274,7 @@ void CreateResourceField (string root, string id, Dictionary> resources) { Log.LogDebugMessage ($"{nameof(ProcessStyleable)}"); - string topName = null; + string? topName = null; List fields = new List (); List attribs = new List (); if (reader.HasAttributes) { @@ -286,8 +286,8 @@ void ProcessStyleable (XmlReader reader, Dictionary> reso while (reader.Read ()) { if (reader.NodeType == XmlNodeType.Whitespace || reader.NodeType == XmlNodeType.Comment) continue; - string name = null; - if (string.IsNullOrEmpty (topName)) { + string? name = null; + if (topName.IsNullOrEmpty ()) { if (reader.HasAttributes) { while (reader.MoveToNextAttribute ()) { if (reader.Name.Replace ("android:", "") == "name") @@ -305,7 +305,9 @@ void ProcessStyleable (XmlReader reader, Dictionary> reso } reader.MoveToElement (); if (reader.LocalName == "attr") { - attribs.Add (name); + if (name != null) { + attribs.Add (name); + } } } var field = new R () { @@ -314,7 +316,9 @@ void ProcessStyleable (XmlReader reader, Dictionary> reso Type = RType.Array, }; if (!arrayMapping.ContainsKey (field)) { - foofoo.Add (field.Identifier, new List ()); + if (field.Identifier != null) { + foofoo.Add (field.Identifier, new List ()); + } attribs.Sort (StringComparer.OrdinalIgnoreCase); for (int i = 0; i < attribs.Count; i++) { string name = attribs [i]; @@ -348,7 +352,9 @@ void ProcessStyleable (XmlReader reader, Dictionary> reso resources [field.ResourceTypeName].Add (field); int id = 0; foreach (string r in attribs) { - foofoo[field.Identifier].Add (r.Replace (":", "_")); + if (field.Identifier != null) { + foofoo[field.Identifier].Add (r.Replace (":", "_")); + } resources [field.ResourceTypeName].Add (new R () { ResourceTypeName = field.ResourceTypeName, Identifier = $"{field.Identifier}_{r.Replace (":", "_")}", @@ -375,7 +381,7 @@ void ProcessXmlFile (XmlReader reader, Dictionary> resour if (reader.IsStartElement ()) { var elementName = reader.Name; var elementNS = reader.NamespaceURI; - if (!string.IsNullOrEmpty (elementNS)) { + if (!elementNS.IsNullOrEmpty ()) { if (elementNS != "http://schemas.android.com/apk/res/android") continue; } @@ -383,15 +389,15 @@ void ProcessXmlFile (XmlReader reader, Dictionary> resour try { ProcessStyleable (reader.ReadSubtree (), resources); } catch (Exception ex) { - Log.LogErrorFromException (ex); + Log?.LogErrorFromException (ex); } continue; } if (reader.HasAttributes) { - string name = null; - string type = null; - string id = null; - string custom_id = null; + string? name = null; + string? type = null; + string? id = null; + string? custom_id = null; while (reader.MoveToNextAttribute ()) { if (reader.LocalName == "name") name = reader.Value; @@ -426,14 +432,14 @@ void ProcessXmlFile (XmlReader reader, Dictionary> resour continue; // Move the reader back to the element node. reader.MoveToElement (); - if (!string.IsNullOrEmpty (name)) { + if (!name.IsNullOrEmpty ()) { CreateResourceField (type ?? elementName, name, resources); } - if (!string.IsNullOrEmpty (custom_id) && !resources.ContainsKey (custom_id)) { + if (!custom_id.IsNullOrEmpty () && !resources.ContainsKey (custom_id)) { resources.Add (custom_id, new SortedSet (new RComparer ())); custom_types.Add (custom_id); } - if (!string.IsNullOrEmpty (id)) { + if (!id.IsNullOrEmpty ()) { CreateResourceField (custom_id ?? "id", id.Replace ("-", "_").Replace (".", "_"), resources); } } diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/FileUtil.cs b/src/Xamarin.Android.Build.Tasks/Utilities/FileUtil.cs index f70ae05f741..40570344264 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/FileUtil.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/FileUtil.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.IO; using System.Runtime.InteropServices; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/IAssemblyResolverExtensions.cs b/src/Xamarin.Android.Build.Tasks/Utilities/IAssemblyResolverExtensions.cs index e35950739a8..86403a8f2b8 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/IAssemblyResolverExtensions.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/IAssemblyResolverExtensions.cs @@ -1,3 +1,4 @@ +#nullable enable using Mono.Cecil; namespace Xamarin.Android.Tasks; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/ITaskItemExtensions.cs b/src/Xamarin.Android.Build.Tasks/Utilities/ITaskItemExtensions.cs index 5bdd33d833c..daef61b97aa 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/ITaskItemExtensions.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/ITaskItemExtensions.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -17,7 +18,7 @@ public static IEnumerable ToXElements (this ICollection ite var e = new XElement (itemName, item.ItemSpec); foreach (var name in knownMetadata) { var value = item.GetMetadata (name); - if (!string.IsNullOrEmpty (value)) + if (!value.IsNullOrEmpty ()) e.SetAttributeValue (name, value); } yield return e; @@ -29,7 +30,7 @@ public static IEnumerable ToXElements (this ICollection ite { var value = item.GetMetadata (name); - if (string.IsNullOrWhiteSpace (value)) + if (value.IsNullOrWhiteSpace ()) return defaultValue; return (T?)Convert.ChangeType (value, typeof (T)); @@ -39,7 +40,7 @@ public static IEnumerable ToXElements (this ICollection ite { var value = item.GetMetadata (name); - if (string.IsNullOrWhiteSpace (value)) { + if (value.IsNullOrWhiteSpace ()) { log.LogCodedError ("XA4234", Properties.Resources.XA4234, itemName, item.ToString (), name); return null; } @@ -51,7 +52,7 @@ public static bool TryGetRequiredMetadata (this ITaskItem item, string itemName, { value = item.GetMetadata (name); - if (string.IsNullOrWhiteSpace (value)) { + if (value.IsNullOrWhiteSpace ()) { log.LogCodedError ("XA4234", Properties.Resources.XA4234, itemName, item.ToString (), name); return false; } diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/InvalidActivityNameException.cs b/src/Xamarin.Android.Build.Tasks/Utilities/InvalidActivityNameException.cs index f23bf6764c7..2c2b5827120 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/InvalidActivityNameException.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/InvalidActivityNameException.cs @@ -1,4 +1,5 @@ -using System; +#nullable enable +using System; namespace Xamarin.Android.Tasks { diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/JCWGenerator.cs b/src/Xamarin.Android.Build.Tasks/Utilities/JCWGenerator.cs index 658adfbc2d3..d466ab85b64 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/JCWGenerator.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/JCWGenerator.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.IO; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/JavaObjectsXmlFile.cs b/src/Xamarin.Android.Build.Tasks/Utilities/JavaObjectsXmlFile.cs index b9b51c4c1de..a427c11f33a 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/JavaObjectsXmlFile.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/JavaObjectsXmlFile.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.IO; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/JsonExtensions.cs b/src/Xamarin.Android.Build.Tasks/Utilities/JsonExtensions.cs index f560669a6e6..bf189ceaded 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/JsonExtensions.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/JsonExtensions.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.Text.Json; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/KnownMetadata.cs b/src/Xamarin.Android.Build.Tasks/Utilities/KnownMetadata.cs index 5bb5246b936..49bb679683e 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/KnownMetadata.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/KnownMetadata.cs @@ -1,3 +1,4 @@ +#nullable enable namespace Xamarin.Android.Tasks; static class KnownMetadata diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MSBuildLinkContext.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MSBuildLinkContext.cs index 1b87f817447..388d27b07fa 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MSBuildLinkContext.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MSBuildLinkContext.cs @@ -1,3 +1,4 @@ +#nullable enable using Java.Interop.Tools.Cecil; using Microsoft.Android.Build.Tasks; using Microsoft.Build.Framework; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MamJsonParser.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MamJsonParser.cs index ce7705cf327..cbce0d3be58 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MamJsonParser.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MamJsonParser.cs @@ -1,6 +1,7 @@ // File must be "stand-alone"; it's included by // `tools/remap-mam-json-to-xml` +#nullable enable using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodCecilAdapter.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodCecilAdapter.cs index 03440ccf3f1..7c6119f5347 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodCecilAdapter.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodCecilAdapter.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Concurrent; using System.Collections.Generic; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodsHelpers.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodsHelpers.cs index 84b5e488253..a281d334873 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodsHelpers.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodsHelpers.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodsNativeAssemblyGeneratorCoreCLR.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodsNativeAssemblyGeneratorCoreCLR.cs index 6a5726a0d43..e57a943afe9 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodsNativeAssemblyGeneratorCoreCLR.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodsNativeAssemblyGeneratorCoreCLR.cs @@ -1,3 +1,4 @@ +#nullable enable using System.Collections.Generic; using Microsoft.Build.Utilities; using Xamarin.Android.Tools; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodsNativeAssemblyGeneratorMonoVM.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodsNativeAssemblyGeneratorMonoVM.cs index 6405c5f83a8..8409dd6bc61 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodsNativeAssemblyGeneratorMonoVM.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodsNativeAssemblyGeneratorMonoVM.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.IO; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodsState.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodsState.cs index 03668cc2240..d2362187a42 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodsState.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MarshalMethodsState.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MavenExtensions.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MavenExtensions.cs index 6649f9895e6..11a68e801fe 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MavenExtensions.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MavenExtensions.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MetadataResolver.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MetadataResolver.cs index 82fea3650ba..abfc8e9d568 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MetadataResolver.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MetadataResolver.cs @@ -1,4 +1,5 @@ -using System; +#nullable enable +using System; using System.Collections.Generic; using System.IO; using System.Reflection.Metadata; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.Basic.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.Basic.cs index 127483cabd9..807c31ac3de 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.Basic.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.Basic.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.Globalization; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.Linker.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.Linker.cs index d3072fb4802..9a88811d904 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.Linker.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.Linker.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.Linq; @@ -48,7 +49,7 @@ public static Dictionary> LoadCustomViewMapFile (string var items = s.Split (CustomViewMapSeparator, count: 2); var key = items [0]; var value = items [1]; - HashSet set; + HashSet? set; if (!map.TryGetValue (key, out set)) map.Add (key, set = new HashSet ()); set.Add (value); diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.Nullable.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.Nullable.cs index 68567e956d4..74a1e11df6d 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.Nullable.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.Nullable.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/NativeCodeGenState.cs b/src/Xamarin.Android.Build.Tasks/Utilities/NativeCodeGenState.cs index 4314d17f812..9bd8618dec1 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/NativeCodeGenState.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/NativeCodeGenState.cs @@ -1,3 +1,4 @@ +#nullable enable using System.Collections.Generic; using Java.Interop.Tools.Cecil; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/NativeLinker.cs b/src/Xamarin.Android.Build.Tasks/Utilities/NativeLinker.cs index 33922e755df..ac53cfebd11 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/NativeLinker.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/NativeLinker.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Diagnostics; using System.IO; @@ -97,7 +98,7 @@ public NativeLinker (TaskLoggingHelper log, string abi, string soname, string bi throw new NotSupportedException ($"Unsupported Android target architecture ABI: {abi}"); } - if (!String.IsNullOrEmpty (elfArch)) { + if (!elfArch.IsNullOrEmpty ()) { extraArgs.Add ($"-m {elfArch}"); } @@ -124,11 +125,11 @@ public static ITaskItem MakeLibraryItem (string baseLibraryName, string abi) public bool Link (ITaskItem outputLibraryPath, List linkItems, List? linkStartFiles = null, List? linkEndFiles = null, ICollection? exportDynamicSymbols = null) { if (UseNdkLibraries) { - if (String.IsNullOrEmpty (NdkRootPath)) { + if (NdkRootPath.IsNullOrEmpty ()) { throw new InvalidOperationException ("Internal error: request to use NDK libraries, but NDK root not specified."); } - if (String.IsNullOrEmpty (NdkApiLevel)) { + if (NdkApiLevel.IsNullOrEmpty ()) { throw new InvalidOperationException ("Internal error: request to use NDK libraries, but NDK API level not specified."); } } @@ -249,7 +250,7 @@ void WriteFilesToResponseFile (StreamWriter sw, List? files) bool ParseBooleanMetadata (ITaskItem item, string metadata) { string? value = item.GetMetadata (metadata); - if (String.IsNullOrEmpty (value)) { + if (value.IsNullOrEmpty ()) { return false; } diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/NativeRuntimeComponents.cs b/src/Xamarin.Android.Build.Tasks/Utilities/NativeRuntimeComponents.cs index 8a57f7afd96..4773d0cd1c1 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/NativeRuntimeComponents.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/NativeRuntimeComponents.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/NativeTypeMappingData.cs b/src/Xamarin.Android.Build.Tasks/Utilities/NativeTypeMappingData.cs index dfc6782c539..1ac17b55fd9 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/NativeTypeMappingData.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/NativeTypeMappingData.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/OutputLine.cs b/src/Xamarin.Android.Build.Tasks/Utilities/OutputLine.cs index 6f19ccbbe1f..68c0c1113d0 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/OutputLine.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/OutputLine.cs @@ -1,4 +1,5 @@ -using System; +#nullable enable +using System; namespace Xamarin.Android.Tasks { public struct OutputLine { public string Line; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/PackageFileListBuilder.cs b/src/Xamarin.Android.Build.Tasks/Utilities/PackageFileListBuilder.cs index 25c03124998..4fc18fe09a8 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/PackageFileListBuilder.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/PackageFileListBuilder.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using Microsoft.Build.Framework; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/PathUtil.cs b/src/Xamarin.Android.Build.Tasks/Utilities/PathUtil.cs index 5156ca8aa9a..18c06342acc 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/PathUtil.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/PathUtil.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.IO; using System.Text; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/PinvokeScanner.cs b/src/Xamarin.Android.Build.Tasks/Utilities/PinvokeScanner.cs index bbce0e6acdb..da3a481274a 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/PinvokeScanner.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/PinvokeScanner.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.IO; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/PreservePinvokesNativeAssemblyGenerator.cs b/src/Xamarin.Android.Build.Tasks/Utilities/PreservePinvokesNativeAssemblyGenerator.cs index 64529305e6a..a68850036c5 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/PreservePinvokesNativeAssemblyGenerator.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/PreservePinvokesNativeAssemblyGenerator.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.Collections.Generic; using System.IO; @@ -373,7 +374,7 @@ LlvmIrFunctionAttributeSet MakeFindPinvokeAttributeSet (LlvmIrModule module) } // Might require mapping of component name to a canonical one - if (libraryNameMap.TryGetValue (componentName, out string? mappedComponentName) && !String.IsNullOrEmpty (mappedComponentName)) { + if (libraryNameMap.TryGetValue (componentName, out string? mappedComponentName) && !mappedComponentName.IsNullOrEmpty ()) { if (Matches (pinfo.LibraryName, mappedComponentName)) { return (true, componentName); } diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/ResourceIdentifier.cs b/src/Xamarin.Android.Build.Tasks/Utilities/ResourceIdentifier.cs index 7edfc38faf5..2ba68550ba5 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/ResourceIdentifier.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/ResourceIdentifier.cs @@ -1,3 +1,4 @@ +#nullable enable using System; using System.CodeDom; using System.CodeDom.Compiler; @@ -35,7 +36,7 @@ public class ResourceIdentifier { public static string CreateValidIdentifier (string identifier) { - if (String.IsNullOrWhiteSpace (identifier)) return string.Empty; + if (identifier.IsNullOrWhiteSpace ()) return ""; var normalizedIdentifier = identifier.Normalize (); @@ -46,7 +47,7 @@ public static string CreateValidIdentifier (string identifier) internal static string GetResourceName (string type, string name, Dictionary map, TaskLoggingHelper log) { - string mappedValue; + string? mappedValue; string key = string.Format ("{0}{1}{2}", type, Path.DirectorySeparatorChar, name).ToLowerInvariant (); if (map.TryGetValue (key, out mappedValue)) {