From 2a5fc458778357ec5ffd4689e0fdc582542fc4eb Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Thu, 15 Jan 2026 12:18:28 +0100 Subject: [PATCH] [msbuild] Add the latest .NET version as a target framework for MSBuild projects This way we actually get nullability warnings from the compiler. And then fix all the nullability warnings. --- external/Xamarin.MacDev | 2 +- .../Xamarin.Localization.MSBuild.csproj | 2 +- .../Xamarin.MacDev.Tasks/BundleResource.cs | 4 ++-- msbuild/Xamarin.MacDev.Tasks/Decompress.cs | 4 ++-- .../Extensions/ITaskItemExtensions.cs | 2 +- msbuild/Xamarin.MacDev.Tasks/LinkerOptions.cs | 2 +- .../StringParserService.cs | 3 +-- msbuild/Xamarin.MacDev.Tasks/Tasks/ACTool.cs | 14 +++++------ .../Xamarin.MacDev.Tasks/Tasks/AOTCompile.cs | 2 +- msbuild/Xamarin.MacDev.Tasks/Tasks/Archive.cs | 4 ++-- msbuild/Xamarin.MacDev.Tasks/Tasks/BGen.cs | 10 ++++---- .../Xamarin.MacDev.Tasks/Tasks/Codesign.cs | 4 ++-- .../Tasks/CompileAppManifest.cs | 6 ++++- .../Tasks/CompileEntitlements.cs | 2 +- .../Tasks/CompileITunesMetadata.cs | 2 +- .../Tasks/CompileSceneKitAssets.cs | 2 +- .../Tasks/ComputeBundleLocation.cs | 8 +++---- .../Tasks/ComputeCodesignItems.cs | 10 ++++---- .../Tasks/CoreMLCompiler.cs | 4 ++-- .../Tasks/CreateBindingResourcePackage.cs | 9 ++++--- .../Tasks/CreateDebugSettings.cs | 2 +- .../Tasks/CreateInstallerPackage.cs | 8 +++---- .../Tasks/CreatePkgInfo.cs | 2 +- .../Tasks/DetectDebugNetworkConfiguration.cs | 9 +++---- .../Tasks/DetectSdkLocation.cs | 2 +- .../Tasks/DetectSigningIdentity.cs | 8 ++++++- msbuild/Xamarin.MacDev.Tasks/Tasks/Ditto.cs | 2 +- .../Tasks/EmbedProvisionProfile.cs | 2 +- .../Tasks/FilterStaticFrameworks.cs | 2 +- .../Xamarin.MacDev.Tasks/Tasks/FindILLink.cs | 2 +- .../Tasks/GetMlaunchArguments.cs | 20 ++++++++-------- .../Tasks/GetPropertyListValue.cs | 6 ++++- msbuild/Xamarin.MacDev.Tasks/Tasks/IBTool.cs | 15 +++++------- msbuild/Xamarin.MacDev.Tasks/Tasks/ILStrip.cs | 2 +- .../Tasks/InstallNameTool.cs | 2 +- .../Tasks/LinkNativeCode.cs | 8 +++---- .../Tasks/MacDevMessage.cs | 2 +- .../Tasks/MergeAppBundles.cs | 6 ++--- msbuild/Xamarin.MacDev.Tasks/Tasks/Metal.cs | 2 +- .../Xamarin.MacDev.Tasks/Tasks/MetalLib.cs | 2 +- .../Tasks/OptimizeImage.cs | 2 +- .../Tasks/OptimizePropertyList.cs | 2 +- .../Tasks/PrepareNativeReferences.cs | 13 +++++----- .../Tasks/ReadItemsFromFile.cs | 13 +++++----- .../Tasks/ResolveNativeReferences.cs | 24 +++++++++---------- .../Tasks/ResolveUniversalTypeIdentifiers.cs | 9 +++---- msbuild/Xamarin.MacDev.Tasks/Tasks/ScnTool.cs | 2 +- .../Xamarin.MacDev.Tasks/Tasks/SmartCopy.cs | 14 +++++------ .../Tasks/TaskItemFixer.cs | 2 +- .../Tasks/TextureAtlas.cs | 4 ++-- .../Tasks/UnpackLibraryResources.cs | 2 +- msbuild/Xamarin.MacDev.Tasks/Tasks/Unzip.cs | 11 +++++---- .../Tasks/WriteAppManifest.cs | 2 +- .../Tasks/WriteItemsToFile.cs | 4 ++-- .../Tasks/XamarinBuildTask.cs | 6 ++--- .../Tasks/XcodeCompilerToolTask.cs | 6 ++--- .../Xamarin.MacDev.Tasks/Tasks/XcodeTool.cs | 2 +- msbuild/Xamarin.MacDev.Tasks/Tasks/Zip.cs | 10 ++++---- .../Xamarin.MacDev.Tasks.csproj | 2 +- .../Xamarin.iOS.Tasks.Windows.csproj | 2 +- tools/common/FileUtils.cs | 2 +- 61 files changed, 172 insertions(+), 162 deletions(-) diff --git a/external/Xamarin.MacDev b/external/Xamarin.MacDev index 757b4f5b7e8e..f1300986199f 160000 --- a/external/Xamarin.MacDev +++ b/external/Xamarin.MacDev @@ -1 +1 @@ -Subproject commit 757b4f5b7e8e2f60ecbea6de3967158cc4f77069 +Subproject commit f1300986199f5489191d2c9712e57bf8a0a3d84a diff --git a/msbuild/Xamarin.Localization.MSBuild/Xamarin.Localization.MSBuild.csproj b/msbuild/Xamarin.Localization.MSBuild/Xamarin.Localization.MSBuild.csproj index 9601983371f1..dc64d52af0f8 100644 --- a/msbuild/Xamarin.Localization.MSBuild/Xamarin.Localization.MSBuild.csproj +++ b/msbuild/Xamarin.Localization.MSBuild/Xamarin.Localization.MSBuild.csproj @@ -1,7 +1,7 @@ - netstandard2.0 + netstandard2.0;net$(BundledNETCoreAppTargetFrameworkVersion) true ../../product.snk enable diff --git a/msbuild/Xamarin.MacDev.Tasks/BundleResource.cs b/msbuild/Xamarin.MacDev.Tasks/BundleResource.cs index dfdc1bc19b29..6b58fffb930e 100644 --- a/msbuild/Xamarin.MacDev.Tasks/BundleResource.cs +++ b/msbuild/Xamarin.MacDev.Tasks/BundleResource.cs @@ -134,9 +134,9 @@ public static string GetVirtualProjectPath (T task, ITaskItem item) where T : // Then find the directory we should use to compute the result relative to. string relativeToDirectory; // this is an absolute path. if (isDefaultItem) { - relativeToDirectory = Path.GetDirectoryName (localMSBuildProjectFullPath); + relativeToDirectory = Path.GetDirectoryName (localMSBuildProjectFullPath)!; } else { - relativeToDirectory = Path.GetDirectoryName (localDefiningProjectFullPath); + relativeToDirectory = Path.GetDirectoryName (localDefiningProjectFullPath)!; } var originalRelativeToDirectory = relativeToDirectory; diff --git a/msbuild/Xamarin.MacDev.Tasks/Decompress.cs b/msbuild/Xamarin.MacDev.Tasks/Decompress.cs index 019dc2d7b8ba..2d4f755378de 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Decompress.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Decompress.cs @@ -128,7 +128,7 @@ public static bool TryDecompress (XamarinTask task, string zip, string resource, } if (rv) { - Directory.CreateDirectory (Path.GetDirectoryName (stampFile)); + Directory.CreateDirectory (Path.GetDirectoryName (stampFile)!); using var touched = new FileStream (stampFile, FileMode.Create, FileAccess.Write); createdFiles.Add (stampFile); } @@ -240,7 +240,7 @@ static bool TryDecompressUsingSystemIOCompression (XamarinTask task, string zip, if (isDir) { Directory.CreateDirectory (targetPath); } else { - Directory.CreateDirectory (Path.GetDirectoryName (targetPath)); + Directory.CreateDirectory (Path.GetDirectoryName (targetPath)!); using var streamWrite = File.OpenWrite (targetPath); using var streamRead = entry.Open (); #if NET diff --git a/msbuild/Xamarin.MacDev.Tasks/Extensions/ITaskItemExtensions.cs b/msbuild/Xamarin.MacDev.Tasks/Extensions/ITaskItemExtensions.cs index d5002fd63ee4..b9871530c602 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Extensions/ITaskItemExtensions.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Extensions/ITaskItemExtensions.cs @@ -25,7 +25,7 @@ public static Dictionary CloneCustomMetadataToDictionary (this I var custom = item.CloneCustomMetadata (); var rv = new Dictionary (custom.Count, StringComparer.OrdinalIgnoreCase); foreach (DictionaryEntry entry in custom) - rv [(string) entry.Key] = (string) entry.Value; + rv [(string) entry.Key] = (string) entry.Value!; return rv; } } diff --git a/msbuild/Xamarin.MacDev.Tasks/LinkerOptions.cs b/msbuild/Xamarin.MacDev.Tasks/LinkerOptions.cs index f58ca920e0cb..4088341654d1 100644 --- a/msbuild/Xamarin.MacDev.Tasks/LinkerOptions.cs +++ b/msbuild/Xamarin.MacDev.Tasks/LinkerOptions.cs @@ -55,7 +55,7 @@ public void BuildNativeReferenceFlags (TaskLoggingHelper Log, ITaskItem [] Nativ var path = item.ItemSpec; // in case the full path to the library is given (msbuild) if (Path.GetExtension (path) != ".framework") - path = Path.GetDirectoryName (path); + path = Path.GetDirectoryName (path)!; Frameworks.Add (path); } else if (kind == NativeReferenceKind.Dynamic) { var path = item.ItemSpec; diff --git a/msbuild/Xamarin.MacDev.Tasks/StringParserService.cs b/msbuild/Xamarin.MacDev.Tasks/StringParserService.cs index 345383043f1d..e3fea4b9790c 100644 --- a/msbuild/Xamarin.MacDev.Tasks/StringParserService.cs +++ b/msbuild/Xamarin.MacDev.Tasks/StringParserService.cs @@ -31,9 +31,8 @@ public static string Parse (string text, IDictionary tags) } var tag = text.Substring (startIndex, i - startIndex); - string value; - if (!tags.TryGetValue (tag, out value)) { + if (!tags.TryGetValue (tag, out var value)) { builder.Append ('$').Append (open).Append (tag).Append (close); } else { builder.Append (value); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/ACTool.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/ACTool.cs index f7dfbcd5a93d..eb09d5ad18dd 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/ACTool.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/ACTool.cs @@ -214,7 +214,7 @@ protected override void AppendCommandLineArguments (IDictionary args.Add ("--include-all-app-icons"); args.Add ("--output-partial-info-plist"); - args.Add (Path.GetFullPath (partialAppManifestPath)); + args.Add (Path.GetFullPath (partialAppManifestPath!)); } IEnumerable GetCompiledBundleResources (PDictionary output, string intermediateBundleDir) @@ -297,8 +297,8 @@ public override bool Execute () var catalogFullPath = imageAsset.GetMetadata ("FullPath"); // get the parent (which will typically be .appiconset, .launchimage, .imageset, .iconset, etc) - var catalog = Path.GetDirectoryName (vpath); - catalogFullPath = Path.GetDirectoryName (catalogFullPath); + var catalog = Path.GetDirectoryName (vpath)!; + catalogFullPath = Path.GetDirectoryName (catalogFullPath)!; var assetType = Path.GetExtension (catalog).TrimStart ('.'); @@ -368,7 +368,7 @@ public override bool Execute () } var dest = Path.Combine (intermediateCloneDir, vpath); - var dir = Path.GetDirectoryName (dest); + var dir = Path.GetDirectoryName (dest)!; Directory.CreateDirectory (dir); @@ -404,13 +404,13 @@ public override bool Execute () if (Platform == ApplePlatform.TVOS) { if (assetType.Equals ("imagestack", StringComparison.OrdinalIgnoreCase)) { - imageStacksInAssets.Add (Path.GetFileNameWithoutExtension (Path.GetDirectoryName (vpath))); + imageStacksInAssets.Add (Path.GetFileNameWithoutExtension (Path.GetDirectoryName (vpath)!)); } else if (assetType.Equals ("brandassets", StringComparison.OrdinalIgnoreCase)) { - brandAssetsInAssets.Add (Path.GetFileNameWithoutExtension (Path.GetDirectoryName (vpath))); + brandAssetsInAssets.Add (Path.GetFileNameWithoutExtension (Path.GetDirectoryName (vpath)!)); } } else { if (assetType.Equals ("appiconset", StringComparison.OrdinalIgnoreCase)) - appIconsInAssets.Add (Path.GetFileNameWithoutExtension (Path.GetDirectoryName (vpath))); + appIconsInAssets.Add (Path.GetFileNameWithoutExtension (Path.GetDirectoryName (vpath)!)); } if (unique.Add (catalog)) { diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/AOTCompile.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/AOTCompile.cs index 3adaa8afd0d9..6759f1f259e8 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/AOTCompile.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/AOTCompile.cs @@ -242,7 +242,7 @@ public override bool Execute () } // All the assemblies to AOT must be in the same directory - var assemblyDirectories = inputs.Select (v => Path.GetDirectoryName (Path.GetFullPath (v))).Distinct ().ToArray (); + var assemblyDirectories = inputs.Select (v => Path.GetDirectoryName (Path.GetFullPath (v))!).Distinct ().ToArray (); if (assemblyDirectories.Length > 1) { // The assemblies are not in the same directory, so copy them somewhere else (to InputDirectory) Directory.CreateDirectory (InputDirectory); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/Archive.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/Archive.cs index 9fe3509612f2..f59676f4517d 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/Archive.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/Archive.cs @@ -156,7 +156,7 @@ public override bool Execute () ArchiveMSym (MSYMDir, archiveDir); // Archive the Bitcode symbol maps - var bcSymbolMaps = Directory.GetFiles (Path.GetDirectoryName (DSYMDir), "*.bcsymbolmap"); + var bcSymbolMaps = Directory.GetFiles (Path.GetDirectoryName (DSYMDir)!, "*.bcsymbolmap"); if (bcSymbolMaps.Length > 0) { var bcSymbolMapsDir = Path.Combine (archiveDir, "BCSymbolMaps"); @@ -306,7 +306,7 @@ void ArchiveAppExtension (ITaskItem appex, string archiveDir) } // Note: App Extension dSYM dirs exist alongside the main app bundle now that they are generated from the main app's MSBuild targets - var dsymDir = Path.Combine (Path.GetDirectoryName (AppBundleDir.ItemSpec), Path.GetFileName (appex.ItemSpec) + ".dSYM"); + var dsymDir = Path.Combine (Path.GetDirectoryName (AppBundleDir.ItemSpec)!, Path.GetFileName (appex.ItemSpec) + ".dSYM"); ArchiveDSym (dsymDir, archiveDir); var msymDir = appex.ItemSpec + ".mSYM"; diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/BGen.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/BGen.cs index 803842390a4f..59e4c3cf065f 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/BGen.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/BGen.cs @@ -215,7 +215,7 @@ public virtual List GenerateCommandLineArguments () }; // OutputAssembly is optional so it can be null if (!string.IsNullOrEmpty (target)) { - var d = Path.GetDirectoryName (target); + var d = Path.GetDirectoryName (target)!; var n = Path.GetFileName (target); customTags.Add ("targetpath", Path.Combine (d, n)); customTags.Add ("targetdir", d); @@ -243,12 +243,12 @@ public override bool Execute () TaskItemFixer.FixItemSpecs (Log, item => OutputPath, References.Where (x => !x.IsFrameworkItem ()).ToArray ()); - var success = ExecuteRemotely (out var taskRunner); - - if (success) + if (ExecuteRemotely (out var taskRunner)) { GetGeneratedSourcesAsync (taskRunner).Wait (); + return true; + } - return success; + return false; } catch (Exception ex) { Log.LogErrorFromException (ex); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/Codesign.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/Codesign.cs index 8d43e4cc110c..62deffacc052 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/Codesign.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/Codesign.cs @@ -341,7 +341,7 @@ bool TryGenerateCommandLineArguments (ITaskItem item, out IList args) // on macOS apps {item.ItemSpec} can be a symlink to `Versions/Current/{item.ItemSpec}` // and `Current` also a symlink to `A`... and `_CodeSignature` will be found there var path = item.ItemSpec; - var parent = Path.GetDirectoryName (path); + var parent = Path.GetDirectoryName (path)!; // so do not don't sign `A.framework/A`, sign `A.framework` which will always sign the *bundle* if ((Path.GetExtension (parent) == ".framework") && (Path.GetFileName (path) == Path.GetFileNameWithoutExtension (parent))) @@ -464,7 +464,7 @@ bool ExecuteUnsafe () // while also not codesigning directories before files inside them. foreach (var res in resourcesToSign) { var path = res.ItemSpec; - var parent = Path.GetDirectoryName (path); + var parent = Path.GetDirectoryName (path)!; // so do not don't sign `A.framework/A`, sign `A.framework` which will always sign the *bundle* if (Path.GetExtension (parent) == ".framework" && Path.GetFileName (path) == Path.GetFileNameWithoutExtension (parent)) diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/CompileAppManifest.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/CompileAppManifest.cs index c17f2793a349..4ba5f04dc0de 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/CompileAppManifest.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/CompileAppManifest.cs @@ -258,7 +258,11 @@ bool SetMinimumOSVersion (PDictionary plist) } } +#if NET if (string.IsNullOrEmpty (minimumOSVersionInManifest)) { +#else + if (string.IsNullOrEmpty (minimumOSVersionInManifest) || minimumOSVersionInManifest is null) { +#endif // Nothing is specified in the Info.plist - use SupportedOSPlatformVersion, and if that's not set, then use the sdkVersion if (!string.IsNullOrEmpty (convertedSupportedOSPlatformVersion)) { minimumOSVersion = convertedSupportedOSPlatformVersion; @@ -294,7 +298,7 @@ bool SetMinimumOSVersion (PDictionary plist) return true; } - protected string? GetMinimumOSVersion (PDictionary plist, out Version version) + protected string? GetMinimumOSVersion (PDictionary plist, out Version? version) { var rv = plist.Get (PlatformFrameworkHelper.GetMinimumOSVersionKey (Platform))?.Value; Version.TryParse (rv, out version); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/CompileEntitlements.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/CompileEntitlements.cs index 4287190635c9..4f0e68874e2e 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/CompileEntitlements.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/CompileEntitlements.cs @@ -558,7 +558,7 @@ public override bool Execute () var compiledEntitlementsFullPath = Path.GetFullPath (CompiledEntitlements!.ItemSpec); var compiledEntitlementsFullPathItem = new TaskItem (compiledEntitlementsFullPath); - Directory.CreateDirectory (Path.GetDirectoryName (compiledEntitlementsFullPath)); + Directory.CreateDirectory (Path.GetDirectoryName (compiledEntitlementsFullPath)!); if (BundleEntitlementsInExecutable) { // Any entitlements the app desires are stored inside the executable for simulator builds, diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/CompileITunesMetadata.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/CompileITunesMetadata.cs index 682279e0ef9a..11f35be9658f 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/CompileITunesMetadata.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/CompileITunesMetadata.cs @@ -69,7 +69,7 @@ public override bool Execute () metadata.Add ("softwareVersionBundleId", (PString) BundleIdentifier); } - Directory.CreateDirectory (Path.GetDirectoryName (OutputPath!.ItemSpec)); + Directory.CreateDirectory (Path.GetDirectoryName (OutputPath!.ItemSpec)!); metadata.Save (OutputPath.ItemSpec, true); return !Log.HasLoggedErrors; diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/CompileSceneKitAssets.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/CompileSceneKitAssets.cs index 3f50e6199dee..aa9c5f424ba3 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/CompileSceneKitAssets.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/CompileSceneKitAssets.cs @@ -94,7 +94,7 @@ static bool TryGetScnAssetsPath (string file, out string scnassets) { scnassets = file; while (scnassets.Length > 0 && Path.GetExtension (scnassets).ToLowerInvariant () != ".scnassets") - scnassets = Path.GetDirectoryName (scnassets); + scnassets = Path.GetDirectoryName (scnassets)!; return scnassets.Length > 0; } diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/ComputeBundleLocation.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/ComputeBundleLocation.cs index a99e1df29bf4..9861a14ec597 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/ComputeBundleLocation.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/ComputeBundleLocation.cs @@ -211,7 +211,7 @@ static bool TryGetFrameworkDirectory (string path, out string? frameworkDirector if (path.EndsWith (".framework", StringComparison.OrdinalIgnoreCase)) { // We might be inside a .xcframework, so check for that first - if (TryGetFrameworkDirectory (Path.GetDirectoryName (path), out var xcframeworkDirectory) && xcframeworkDirectory!.EndsWith (".xcframework", StringComparison.OrdinalIgnoreCase)) { + if (TryGetFrameworkDirectory (Path.GetDirectoryName (path)!, out var xcframeworkDirectory) && xcframeworkDirectory!.EndsWith (".xcframework", StringComparison.OrdinalIgnoreCase)) { frameworkDirectory = xcframeworkDirectory; return true; } @@ -220,7 +220,7 @@ static bool TryGetFrameworkDirectory (string path, out string? frameworkDirector return true; } - return TryGetFrameworkDirectory (Path.GetDirectoryName (path), out frameworkDirectory); + return TryGetFrameworkDirectory (Path.GetDirectoryName (path)!, out frameworkDirectory); } // Check if the input, or any of it's parent directories is a *.resources directory or a *.resources.zip file next to a *.dll. @@ -240,7 +240,7 @@ static bool IsBindingResourcePackage (string path, out PublishFolderType type) return true; } - return IsBindingResourcePackage (Path.GetDirectoryName (path), out type); + return IsBindingResourcePackage (Path.GetDirectoryName (path)!, out type); } static string GetVirtualAppBundlePath (ITaskItem item) @@ -294,7 +294,7 @@ PublishFolderType ComputePublishFolderType (IList items, ITaskItem it var filename = item.ItemSpec; var targetPath = item.GetMetadata ("TargetPath"); if (!string.IsNullOrEmpty (targetPath)) - filename = Path.Combine (Path.GetDirectoryName (filename), Path.GetFileName (targetPath)); + filename = Path.Combine (Path.GetDirectoryName (filename)!, Path.GetFileName (targetPath)); // Check if the item came from @(BundleResource), @(Content) or @(EmbeddedResource) if (resourceFilesSet.Contains (Path.GetFullPath (item.ItemSpec))) diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/ComputeCodesignItems.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/ComputeCodesignItems.cs index 0173f0474810..78a1d6d2bc49 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/ComputeCodesignItems.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/ComputeCodesignItems.cs @@ -77,7 +77,7 @@ public override bool Execute () continue; // Create a new item for the app bundle, and copy any metadata over. - var bundlePath = Path.Combine (Path.GetDirectoryName (AppBundleDir), bundle.ItemSpec); + var bundlePath = Path.Combine (Path.GetDirectoryName (AppBundleDir)!, bundle.ItemSpec); var item = new TaskItem (bundlePath); bundle.CopyMetadataTo (item); @@ -88,12 +88,12 @@ public override bool Execute () var additionalStampFiles = new List (); // We must touch the dSYM directory's Info.plist, to ensure that we don't end up running dsymutil again after codesigning in the next build var generateDSymItem = GenerateDSymItems.FirstOrDefault (v => { - return string.Equals (Path.Combine (Path.GetDirectoryName (AppBundleDir), Path.GetDirectoryName (v.ItemSpec)), item.ItemSpec, StringComparison.OrdinalIgnoreCase); + return string.Equals (Path.Combine (Path.GetDirectoryName (AppBundleDir)!, Path.GetDirectoryName (v.ItemSpec)!), item.ItemSpec, StringComparison.OrdinalIgnoreCase); }); if (generateDSymItem is not null) additionalStampFiles.Add (generateDSymItem.GetMetadata ("dSYMUtilStampFile")); // We must touch the stamp file for native stripping, to ensure that we don't want to run strip again after codesigning in the next build - var nativeStripItem = NativeStripItems.FirstOrDefault (v => string.Equals (Path.Combine (Path.GetDirectoryName (AppBundleDir), Path.GetDirectoryName (v.ItemSpec)), item.ItemSpec, StringComparison.OrdinalIgnoreCase)); + var nativeStripItem = NativeStripItems.FirstOrDefault (v => string.Equals (Path.Combine (Path.GetDirectoryName (AppBundleDir)!, Path.GetDirectoryName (v.ItemSpec)!), item.ItemSpec, StringComparison.OrdinalIgnoreCase)); if (nativeStripItem is not null) additionalStampFiles.Add (nativeStripItem.GetMetadata ("StripStampFile")); // Set the CodesignAdditionalFilesToTouch metadata @@ -111,7 +111,7 @@ public override bool Execute () // - *.framework directories // - *.xpc directories foreach (var bundle in CodesignBundle) { - var bundlePath = Path.Combine (Path.GetDirectoryName (Path.GetDirectoryName (appBundlePath)), bundle.ItemSpec); + var bundlePath = Path.Combine (Path.GetDirectoryName (Path.GetDirectoryName (appBundlePath)!)!, bundle.ItemSpec); var filesToSign = FindFilesToSign (bundlePath); foreach (var lib in filesToSign) { if (Array.Find (CodesignItems, (v) => string.Equals (v.ItemSpec, lib, StringComparison.OrdinalIgnoreCase)) is not null) @@ -207,7 +207,7 @@ void RemoveFilesToNotSign (List output, string appBundlePath) // Canonicalize the paths and split into files and directories var canonicalizedItemsToSkip = SkipCodesignItems - .Select (v => Path.Combine (Path.GetDirectoryName (appBundlePath), v.ItemSpec)) + .Select (v => Path.Combine (Path.GetDirectoryName (appBundlePath)!, v.ItemSpec)) .ToArray (); var canonicalizedDirectoriesToSkip = canonicalizedItemsToSkip .Where (v => Directory.Exists (v)) diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/CoreMLCompiler.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/CoreMLCompiler.cs index f30f62555eb7..85a1b2d1cf7b 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/CoreMLCompiler.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/CoreMLCompiler.cs @@ -115,7 +115,7 @@ IEnumerable GetCompiledOutput (string baseOutputDir, IDictionary GenerateCommandLineCommands () PkgPackagePath = Path.GetFullPath (PkgPackagePath); args.Add (PkgPackagePath); - Directory.CreateDirectory (Path.GetDirectoryName (PkgPackagePath)); + Directory.CreateDirectory (Path.GetDirectoryName (PkgPackagePath)!); return args; } @@ -133,10 +133,10 @@ void AppendExtraArgs (List args, string extraArgs) string [] argv = StringUtils.ParseArguments (extraArgs); var customTags = new Dictionary (StringComparer.OrdinalIgnoreCase) { - { "projectdir", Path.GetDirectoryName (this.ProjectPath) }, + { "projectdir", Path.GetDirectoryName (this.ProjectPath)! }, { "appbundledir", this.AppBundleDir }, - { "targetpath", Path.Combine (Path.GetDirectoryName (target), Path.GetFileName (target)) }, - { "targetdir", Path.GetDirectoryName (target) }, + { "targetpath", Path.Combine (Path.GetDirectoryName (target)!, Path.GetFileName (target)) }, + { "targetdir", Path.GetDirectoryName (target)! }, { "targetname", Path.GetFileName (target) }, { "targetext", Path.GetExtension (target) }, }; diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/CreatePkgInfo.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/CreatePkgInfo.cs index a4a3d5d24001..75752b084692 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/CreatePkgInfo.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/CreatePkgInfo.cs @@ -27,7 +27,7 @@ public override bool Execute () return ExecuteRemotely (); if (!File.Exists (OutputPath.ItemSpec)) { - Directory.CreateDirectory (Path.GetDirectoryName (OutputPath.ItemSpec)); + Directory.CreateDirectory (Path.GetDirectoryName (OutputPath.ItemSpec)!); using (var stream = File.OpenWrite (OutputPath.ItemSpec)) { stream.Write (PkgInfoData, 0, PkgInfoData.Length); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/DetectDebugNetworkConfiguration.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/DetectDebugNetworkConfiguration.cs index 47d1ca2a496c..02cbc8d5b6e5 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/DetectDebugNetworkConfiguration.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/DetectDebugNetworkConfiguration.cs @@ -64,9 +64,8 @@ public override bool Execute () try { socket.Connect ("8.8.8.8", 53); - var ipEndPoint = (IPEndPoint) socket.LocalEndPoint; - - ips.Add (ipEndPoint.Address.ToString ()); + if (socket.LocalEndPoint is IPEndPoint ipEndPoint) + ips.Add (ipEndPoint.Address.ToString ()); } catch { Log.LogError (7001, null, MSBStrings.E7001); return false; @@ -75,9 +74,7 @@ public override bool Execute () } } else { foreach (var host in hosts) { - IPAddress ip; - - if (IPAddress.TryParse (host, out ip)) + if (IPAddress.TryParse (host, out var ip)) ips.Add (ip.ToString ()); } } diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/DetectSdkLocation.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/DetectSdkLocation.cs index 084c0cc3ecd3..3e5842d77c8b 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/DetectSdkLocation.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/DetectSdkLocation.cs @@ -107,7 +107,7 @@ protected void EnsureSdkPath () } Log.LogWarning (MSBStrings.E0173 /* The {0} SDK version '{1}' is not installed. Using newer version '{2}' instead'. */, PlatformName, requestedSdkVersion, sdkVersion); } - SdkVersion = sdkVersion.ToString (); + SdkVersion = sdkVersion.ToString () ?? ""; SdkRoot = currentSdk.GetSdkPath (SdkVersion, SdkIsSimulator); if (string.IsNullOrEmpty (SdkRoot)) diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/DetectSigningIdentity.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/DetectSigningIdentity.cs index f3797f0c3bca..96bd8d1455b3 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/DetectSigningIdentity.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/DetectSigningIdentity.cs @@ -405,8 +405,14 @@ bool TryGetSigningCertificates ([NotNullWhen (true)] out IList } class SigningIdentityComparer : IComparer { - public int Compare (CodeSignIdentity x, CodeSignIdentity y) + public int Compare (CodeSignIdentity? x, CodeSignIdentity? y) { + if (x is null && y is null) + return 0; + if (x is null) + return -1; + if (y is null) + return 1; // reverse sort by provisioning profile creation date return y.Profile!.CreationDate.CompareTo (x.Profile!.CreationDate); } diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/Ditto.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/Ditto.cs index 89abe8e02b67..3ddc82f3a050 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/Ditto.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/Ditto.cs @@ -61,7 +61,7 @@ public override bool Execute () // This is executed directly on Windows for remote builds var stampPath = StampFile?.ItemSpec; if (!string.IsNullOrEmpty (stampPath)) { - Directory.CreateDirectory (Path.GetDirectoryName (stampPath)); + Directory.CreateDirectory (Path.GetDirectoryName (stampPath)!); var src = Source?.ItemSpec; var destination = Destination?.ItemSpec; File.WriteAllText (stampPath, $"{src} -> {destination}"); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/EmbedProvisionProfile.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/EmbedProvisionProfile.cs index a738d93a8c9f..146d4b3a9b0e 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/EmbedProvisionProfile.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/EmbedProvisionProfile.cs @@ -60,7 +60,7 @@ public override bool Execute () return true; } - Directory.CreateDirectory (Path.GetDirectoryName (embedded)); + Directory.CreateDirectory (Path.GetDirectoryName (embedded)!); profile.Save (embedded); return true; diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/FilterStaticFrameworks.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/FilterStaticFrameworks.cs index 33b62637243f..e4a9975fb32b 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/FilterStaticFrameworks.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/FilterStaticFrameworks.cs @@ -82,7 +82,7 @@ public override bool Execute () frameworkExecutablePath = GetFrameworkExecutablePath (frameworkExecutablePath, Platform, Log); } - if (OnlyFilterFrameworks && !Path.GetDirectoryName (frameworkExecutablePath).EndsWith (".framework", StringComparison.OrdinalIgnoreCase)) { + if (OnlyFilterFrameworks && !Path.GetDirectoryName (frameworkExecutablePath)!.EndsWith (".framework", StringComparison.OrdinalIgnoreCase)) { Log.LogMessage (MessageImportance.Low, $"Skipped processing {item.ItemSpec} because it's not a framework"); continue; } diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/FindILLink.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/FindILLink.cs index 464a3ac771ce..68072e722367 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/FindILLink.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/FindILLink.cs @@ -24,7 +24,7 @@ protected override bool ExecuteLocally () return false; if (!string.IsNullOrEmpty (illinkTaskPath)) - ILLinkPath = Path.Combine (Path.GetDirectoryName (illinkTaskPath), "illink.dll"); + ILLinkPath = Path.Combine (Path.GetDirectoryName (illinkTaskPath)!, "illink.dll"); if (!File.Exists (ILLinkPath)) Log.LogError (MSBStrings.E7115 /*"The illink assembly doesn't exist: '{0}'" */, ILLinkPath); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/GetMlaunchArguments.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/GetMlaunchArguments.cs index 0c0f8efc00f6..bc3df264a81e 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/GetMlaunchArguments.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/GetMlaunchArguments.cs @@ -86,13 +86,13 @@ public IPhoneDeviceType DeviceType { var xml = new XmlDocument (); xml.LoadXml (output); // Get the device types for the product family we're looking for - var nodes = xml.SelectNodes ($"/MTouch/Simulator/SupportedDeviceTypes/SimDeviceType[ProductFamilyId='{productFamily}']").Cast (); + var nodes = xml.SelectNodes ($"/MTouch/Simulator/SupportedDeviceTypes/SimDeviceType[ProductFamilyId='{productFamily}']")?.Cast () ?? Array.Empty (); // Create a list of them all var deviceTypes = new List<(long Min, long Max, string Identifier)> (); foreach (var node in nodes) { - var minRuntimeVersionValue = node.SelectSingleNode ("MinRuntimeVersion").InnerText; - var maxRuntimeVersionValue = node.SelectSingleNode ("MaxRuntimeVersion").InnerText; - var identifier = node.SelectSingleNode ("Identifier").InnerText; + var minRuntimeVersionValue = node.SelectSingleNode ("MinRuntimeVersion")?.InnerText ?? string.Empty; + var maxRuntimeVersionValue = node.SelectSingleNode ("MaxRuntimeVersion")?.InnerText ?? string.Empty; + var identifier = node.SelectSingleNode ("Identifier")?.InnerText ?? string.Empty; if (!long.TryParse (minRuntimeVersionValue, out var minRuntimeVersion)) continue; if (!long.TryParse (maxRuntimeVersionValue, out var maxRuntimeVersion)) @@ -172,9 +172,9 @@ public IPhoneDeviceType DeviceType { var xml = new XmlDocument (); xml.LoadXml (output); // Get the device types for the product family we're looking for - var nodes = xml.SelectNodes ($"/MTouch/Simulator/AvailableDevices/SimDevice").Cast (); + var nodes = xml.SelectNodes ($"/MTouch/Simulator/AvailableDevices/SimDevice")?.Cast () ?? Array.Empty (); foreach (var node in nodes) { - var simDeviceType = node.SelectSingleNode ("SimDeviceType").InnerText; + var simDeviceType = node.SelectSingleNode ("SimDeviceType")?.InnerText ?? string.Empty; if (!deviceTypes.Contains (simDeviceType)) continue; var udid = node.Attributes? ["UDID"]?.Value ?? string.Empty; @@ -226,10 +226,10 @@ public IPhoneDeviceType DeviceType { var xml = new XmlDocument (); xml.LoadXml (output); // Get the device types for the device classes we're looking for - var nodes = xml.SelectNodes ($"/MTouch/Device{deviceClassCondition}").Cast (); + var nodes = xml.SelectNodes ($"/MTouch/Device{deviceClassCondition}")?.Cast () ?? Array.Empty (); foreach (var node in nodes) { - var deviceIdentifier = node.SelectSingleNode ("DeviceIdentifier").InnerText; - var name = node.SelectSingleNode ("Name").InnerText; + var deviceIdentifier = node.SelectSingleNode ("DeviceIdentifier")?.InnerText ?? string.Empty; + var name = node.SelectSingleNode ("Name")?.InnerText ?? string.Empty; var productVersionString = node.SelectSingleNode ("ProductVersion")?.InnerText; string? notApplicableBecause = null; @@ -343,7 +343,7 @@ static string GetTerminalName (int fd) if (isatty (fd) != 1) return string.Empty; - return Marshal.PtrToStringAuto (ttyname (fd)); + return Marshal.PtrToStringAuto (ttyname (fd)) ?? string.Empty; } void ShowHelp () diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/GetPropertyListValue.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/GetPropertyListValue.cs index 2710251abd02..95294ffee6c8 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/GetPropertyListValue.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/GetPropertyListValue.cs @@ -86,7 +86,11 @@ public override bool Execute () return false; } - Value = value is IPValueObject pvalue ? pvalue.Value.ToString () : value.ToString (); + if (value is IPValueObject pvalue) { + Value = pvalue.Value.ToString () ?? string.Empty; + } else { + Value = value.ToString () ?? string.Empty; + } return !Log.HasLoggedErrors; } diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/IBTool.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/IBTool.cs index 5ae4938b055e..f71e3ab3a680 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/IBTool.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/IBTool.cs @@ -117,9 +117,7 @@ IEnumerable GetCompilationDirectoryOutput (string baseOutputDir, IDic continue; } - IDictionary metadata; - - if (!mapping.TryGetValue (path, out metadata)) + if (!mapping.TryGetValue (path, out var metadata)) continue; var compiled = new TaskItem (path, metadata); @@ -127,7 +125,7 @@ IEnumerable GetCompilationDirectoryOutput (string baseOutputDir, IDic // adjust the LogicalName since the LogicalName metadata is based on the generic output name // (e.g. it does not include things like ~ipad or ~iphone) var logicalName = compiled.GetMetadata ("LogicalName"); - var logicalDir = Path.GetDirectoryName (logicalName); + var logicalDir = Path.GetDirectoryName (logicalName)!; var fileName = Path.GetFileName (path); compiled.SetMetadata ("LogicalName", Path.Combine (logicalDir, fileName)); @@ -188,8 +186,7 @@ bool CompileInterfaceDefinitions (IEnumerable interfaceDefinitions, s foreach (var item in interfaceDefinitions) { var bundleName = item.GetMetadata ("LogicalName"); var manifest = new TaskItem (Path.Combine (baseManifestDir, bundleName)); - var manifestDir = Path.GetDirectoryName (manifest.ItemSpec); - ITaskItem duplicate; + var manifestDir = Path.GetDirectoryName (manifest.ItemSpec)!; string output; if (!File.Exists (item.ItemSpec)) { @@ -197,7 +194,7 @@ bool CompileInterfaceDefinitions (IEnumerable interfaceDefinitions, s continue; } - if (unique.TryGetValue (bundleName, out duplicate)) { + if (unique.TryGetValue (bundleName, out var duplicate)) { Log.LogError (null, null, null, item.ItemSpec, 0, 0, 0, 0, MSBStrings.E0159, item.ItemSpec, duplicate.ItemSpec); continue; } @@ -206,7 +203,7 @@ bool CompileInterfaceDefinitions (IEnumerable interfaceDefinitions, s var resourceTags = item.GetMetadata ("ResourceTags"); var path = Path.Combine (baseOutputDir, bundleName); - var outputDir = Path.GetDirectoryName (path); + var outputDir = Path.GetDirectoryName (path)!; var name = GetPathWithoutExtension (path); var extension = Path.GetExtension (path); var expected = new TaskItem (path); @@ -218,7 +215,7 @@ bool CompileInterfaceDefinitions (IEnumerable interfaceDefinitions, s if (EnableOnDemandResources && !string.IsNullOrEmpty (resourceTags)) expected.SetMetadata ("ResourceTags", resourceTags); - output = Path.GetDirectoryName (path); + output = Path.GetDirectoryName (path)!; if (InterfaceDefinitionChanged (item, manifest)) { Directory.CreateDirectory (manifestDir); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/ILStrip.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/ILStrip.cs index d40f12632b25..eec478573062 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/ILStrip.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/ILStrip.cs @@ -26,7 +26,7 @@ public override bool Execute () foreach (var item in Assemblies) { var outputPath = item.GetMetadata ("OutputPath"); - Directory.CreateDirectory (Path.GetDirectoryName (outputPath)); + Directory.CreateDirectory (Path.GetDirectoryName (outputPath)!); } var result = base.Execute (); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/InstallNameTool.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/InstallNameTool.cs index 8430835aefee..76cef414fb89 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/InstallNameTool.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/InstallNameTool.cs @@ -40,7 +40,7 @@ public override bool Execute () var temporaryTarget = target + ".tmp"; // install_name_tool modifies the file in-place, so copy it first to a temporary file first. - Directory.CreateDirectory (Path.GetDirectoryName (temporaryTarget)); + Directory.CreateDirectory (Path.GetDirectoryName (temporaryTarget)!); File.Copy (src, temporaryTarget, true); var arguments = new List (); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/LinkNativeCode.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/LinkNativeCode.cs index ad7f93d0114c..c05b21d201e2 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/LinkNativeCode.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/LinkNativeCode.cs @@ -57,7 +57,7 @@ public class LinkNativeCode : XamarinTask, ITaskCallback { public override bool Execute () { if (ShouldExecuteRemotely ()) { - outputPath = PathUtils.ConvertToMacPath (Path.GetDirectoryName (OutputFile.ItemSpec)); + outputPath = PathUtils.ConvertToMacPath (Path.GetDirectoryName (OutputFile.ItemSpec)!); return ExecuteRemotely (); } @@ -94,14 +94,14 @@ bool ExecuteUnsafe () foreach (var framework in linkerArguments.Frameworks) { var fullPath = Path.GetFullPath (framework); arguments.Add ("-F"); - arguments.Add (Path.GetDirectoryName (fullPath)); + arguments.Add (Path.GetDirectoryName (fullPath)!); arguments.Add ("-framework"); arguments.Add (Path.GetFileNameWithoutExtension (fullPath)); } foreach (var framework in linkerArguments.WeakFrameworks) { var fullPath = Path.GetFullPath (framework); arguments.Add ("-F"); - arguments.Add (Path.GetDirectoryName (fullPath)); + arguments.Add (Path.GetDirectoryName (fullPath)!); arguments.Add ("-weak_framework"); arguments.Add (Path.GetFileNameWithoutExtension (fullPath)); } @@ -185,7 +185,7 @@ bool ExecuteUnsafe () if (framework.EndsWith (".framework", StringComparison.Ordinal)) { // user framework, we need to pass -F to the linker so that the linker finds the user framework. arguments.Add ("-F"); - arguments.Add (Path.GetDirectoryName (Path.GetFullPath (framework))); + arguments.Add (Path.GetDirectoryName (Path.GetFullPath (framework))!); framework = Path.GetFileNameWithoutExtension (framework); hasEmbeddedFrameworks = true; } diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/MacDevMessage.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/MacDevMessage.cs index 69d98c904a63..54b25d5fd505 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/MacDevMessage.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/MacDevMessage.cs @@ -30,7 +30,7 @@ public class MacDevMessage : Task { public override bool Execute () { - var msg = MSBStrings.ResourceManager.GetString (ResourceName, MSBStrings.Culture); + var msg = MSBStrings.ResourceManager.GetString (ResourceName, MSBStrings.Culture) ?? $"Could not find the resource '{ResourceName}'."; var args = FormatArguments.Select (v => v.ItemSpec).ToArray (); var message = string.Format (msg, args); if (Error) { diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/MergeAppBundles.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/MergeAppBundles.cs index 5f8fcf89c516..07e015ee613f 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/MergeAppBundles.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/MergeAppBundles.cs @@ -112,7 +112,7 @@ public void FindDependentFiles () return false; // if the name of the immediate subdirectory isn't a valid culture, then it's not a dependent assembly of ours - var immediateSubDir = Path.GetFileName (Path.GetDirectoryName (v.RelativePath)); + var immediateSubDir = Path.GetFileName (Path.GetDirectoryName (v.RelativePath)!); var cultureInfo = CultureInfo.GetCultureInfo (immediateSubDir); if (cultureInfo is null) return false; @@ -207,7 +207,7 @@ public void CopyTo (string outputDirectory, string? subDirectory = null) if (Type == FileType.Directory) { Directory.CreateDirectory (outputFile); } else if (Type == FileType.Symlink) { - Directory.CreateDirectory (Path.GetDirectoryName (outputFile)); + Directory.CreateDirectory (Path.GetDirectoryName (outputFile)!); var symlinkTarget = PathUtils.GetSymlinkTarget (FullPath); if (File.Exists (outputFile) && PathUtils.IsSymlink (outputFile) && PathUtils.GetSymlinkTarget (outputFile) == symlinkTarget) { File.SetLastWriteTimeUtc (outputFile, DateTime.UtcNow); // update the timestamp, because the file the symlink points to might have changed. @@ -217,7 +217,7 @@ public void CopyTo (string outputDirectory, string? subDirectory = null) PathUtils.Symlink (symlinkTarget, outputFile); } } else { - Directory.CreateDirectory (Path.GetDirectoryName (outputFile)); + Directory.CreateDirectory (Path.GetDirectoryName (outputFile)!); if (!FileCopier.IsUptodate (FullPath, outputFile, Task.FileCopierReportErrorCallback, Task.FileCopierLogCallback)) File.Copy (FullPath, outputFile, true); } diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/Metal.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/Metal.cs index 8e5c4b298ebe..85ae433f82ab 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/Metal.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/Metal.cs @@ -65,7 +65,7 @@ public override bool Execute () var logicalName = BundleResource.GetLogicalName (this, SourceFile!); var path = Path.Combine (intermediate, logicalName); var args = new List (); - var dir = Path.GetDirectoryName (path); + var dir = Path.GetDirectoryName (path)!; Directory.CreateDirectory (dir); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/MetalLib.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/MetalLib.cs index 804c846c14fe..0ee8d8c4573e 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/MetalLib.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/MetalLib.cs @@ -38,7 +38,7 @@ public override bool Execute () if (ShouldExecuteRemotely ()) return ExecuteRemotely (); - var dir = Path.GetDirectoryName (OutputLibrary); + var dir = Path.GetDirectoryName (OutputLibrary)!; Directory.CreateDirectory (dir); var env = new Dictionary { diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/OptimizeImage.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/OptimizeImage.cs index 6fef2efe045f..2403cb718e84 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/OptimizeImage.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/OptimizeImage.cs @@ -82,7 +82,7 @@ public override bool Execute () var inputImage = this.InputImages [index].ItemSpec; var outputImage = this.OutputImages [index].ItemSpec; - Directory.CreateDirectory (Path.GetDirectoryName (outputImage)); + Directory.CreateDirectory (Path.GetDirectoryName (outputImage)!); var args = GenerateCommandLineCommands (inputImage, outputImage); listOfArguments.Add ((args, inputImage)); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/OptimizePropertyList.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/OptimizePropertyList.cs index a98b1f365849..160d0d587a25 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/OptimizePropertyList.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/OptimizePropertyList.cs @@ -46,7 +46,7 @@ public override bool Execute () if (ShouldExecuteRemotely ()) return ExecuteRemotely (); - Directory.CreateDirectory (Path.GetDirectoryName (Output!.ItemSpec)); + Directory.CreateDirectory (Path.GetDirectoryName (Output!.ItemSpec)!); var args = GenerateCommandLineCommands (); var executable = GetExecutable (args, "plutil", PlutilPath); cancellationTokenSource = new CancellationTokenSource (); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/PrepareNativeReferences.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/PrepareNativeReferences.cs index b6f29028ea84..51468eedf399 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/PrepareNativeReferences.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/PrepareNativeReferences.cs @@ -92,12 +92,13 @@ void AppendStringProperty (StringBuilder builder, ITaskItem item, string propert new bool ExecuteRemotely () { - var success = base.ExecuteRemotely (out var taskRunner); - - if (success && LinkWithAttributes is not null) - taskRunner.GetFileAsync (this, LinkWithAttributes.ItemSpec).Wait (); + if (base.ExecuteRemotely (out var taskRunner)) { + if (LinkWithAttributes is not null) + taskRunner.GetFileAsync (this, LinkWithAttributes.ItemSpec).Wait (); + return true; + } - return success; + return false; } public override bool Execute () @@ -159,7 +160,7 @@ public override bool Execute () skipLinkWithGeneration = String.Equals (existingLinkWithText, linkWithText, StringComparison.Ordinal); } if (!skipLinkWithGeneration) { - Directory.CreateDirectory (Path.GetDirectoryName (linkWithPath)); + Directory.CreateDirectory (Path.GetDirectoryName (linkWithPath)!); File.WriteAllText (linkWithPath, linkWithText); } diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/ReadItemsFromFile.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/ReadItemsFromFile.cs index 743baa151cc6..e2fbad4cfaa2 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/ReadItemsFromFile.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/ReadItemsFromFile.cs @@ -45,11 +45,12 @@ public override bool Execute () var document = XDocument.Load (stream); var items = document.Root - .Elements (ItemGroupElementName) - .SelectMany (element => element.Elements ()) - .Select (element => this.CreateItemFromElement (element, file.ItemSpec)) - .ToList (); - result.AddRange (items); + ?.Elements (ItemGroupElementName) + ?.SelectMany (element => element.Elements ()) + ?.Select (element => this.CreateItemFromElement (element, file.ItemSpec)) + ?.ToList (); + if (items is not null) + result.AddRange (items); } if (Items is not null) @@ -62,7 +63,7 @@ public override bool Execute () ITaskItem CreateItemFromElement (XElement element, string sourceFile) { - var item = new TaskItem (element.Attribute (IncludeAttributeName).Value); + var item = new TaskItem (element.Attribute (IncludeAttributeName)!.Value); foreach (var metadata in element.Elements ()) { item.SetMetadata (metadata.Name.LocalName, metadata.Value); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/ResolveNativeReferences.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/ResolveNativeReferences.cs index a40e837b802b..73c8dcc7dee5 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/ResolveNativeReferences.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/ResolveNativeReferences.cs @@ -153,9 +153,9 @@ void ProcessNativeReference (ITaskItem item, string name, List native { // '.' can be used to represent a file (instead of the directory) if (Path.GetFileName (name) == ".") - name = Path.GetDirectoryName (name); + name = Path.GetDirectoryName (name)!; - var parentDirectory = Path.GetDirectoryName (name); + var parentDirectory = Path.GetDirectoryName (name)!; // framework if (name.EndsWith (".framework", StringComparison.OrdinalIgnoreCase)) { @@ -163,7 +163,7 @@ void ProcessNativeReference (ITaskItem item, string name, List native nr.ItemSpec = GetActualLibrary (name); nr.SetMetadata ("Kind", "Framework"); nr.SetMetadata ("PublishFolderType", "AppleFramework"); - nr.SetMetadata ("RelativePath", Path.Combine (FrameworksDirectory, Path.GetFileName (Path.GetDirectoryName (nr.ItemSpec)))); + nr.SetMetadata ("RelativePath", Path.Combine (FrameworksDirectory, Path.GetFileName (Path.GetDirectoryName (nr.ItemSpec))!)); native_frameworks.Add (nr); return; } else if (parentDirectory.EndsWith (".framework", StringComparison.OrdinalIgnoreCase) && Path.GetFileName (name) == Path.GetFileNameWithoutExtension (parentDirectory)) { @@ -171,7 +171,7 @@ void ProcessNativeReference (ITaskItem item, string name, List native nr.ItemSpec = GetActualLibrary (name); nr.SetMetadata ("Kind", "Framework"); nr.SetMetadata ("PublishFolderType", "AppleFramework"); - nr.SetMetadata ("RelativePath", Path.Combine (FrameworksDirectory, Path.GetFileName (Path.GetDirectoryName (nr.ItemSpec)))); + nr.SetMetadata ("RelativePath", Path.Combine (FrameworksDirectory, Path.GetFileName (Path.GetDirectoryName (nr.ItemSpec))!)); native_frameworks.Add (nr); return; } @@ -214,7 +214,7 @@ void ProcessNativeReference (ITaskItem item, string name, List native nr.ItemSpec = GetActualLibrary (frameworkPath); nr.SetMetadata ("Kind", "Framework"); nr.SetMetadata ("PublishFolderType", "AppleFramework"); - nr.SetMetadata ("RelativePath", Path.Combine (FrameworksDirectory, Path.GetFileName (Path.GetDirectoryName (nr.ItemSpec)))); + nr.SetMetadata ("RelativePath", Path.Combine (FrameworksDirectory, Path.GetFileName (Path.GetDirectoryName (nr.ItemSpec)!))); native_frameworks.Add (nr); return; } @@ -296,7 +296,7 @@ void SetMetadataNativeLibrary (ITaskItem item, string nativeLibraryPath) item.SetMetadata ("Kind", "Framework"); item.SetMetadata ("PublishFolderType", "AppleFramework"); } - item.SetMetadata ("RelativePath", Path.Combine (FrameworksDirectory, Path.GetFileName (Path.GetDirectoryName (item.ItemSpec)))); + item.SetMetadata ("RelativePath", Path.Combine (FrameworksDirectory, Path.GetFileName (Path.GetDirectoryName (item.ItemSpec)!))); } void ProcessSidecar (ITaskItem r, string resources, List native_frameworks, List createdFiles, CancellationToken? cancellationToken) @@ -305,11 +305,11 @@ void ProcessSidecar (ITaskItem r, string resources, List native_frame return; var isCompressed = CompressionHelper.IsCompressed (resources); - XmlDocument document = new XmlDocument (); + var document = new XmlDocument (); document.LoadXmlWithoutNetworkAccess (manifestContents); foreach (XmlNode referenceNode in document.GetElementsByTagName ("NativeReference")) { ITaskItem t = new TaskItem (r); - var name = referenceNode.Attributes ["Name"].Value.Trim ('\\', '/'); + var name = referenceNode.Attributes? ["Name"]?.Value.Trim ('\\', '/') ?? string.Empty; if (name.EndsWith (".xcframework", StringComparison.Ordinal) || name.EndsWith (".xcframework.zip", StringComparison.Ordinal)) { if (!TryResolveXCFramework (this, TargetFrameworkMoniker, SdkIsSimulator, Architectures, resources, name, GetIntermediateDecompressionDir (resources), createdFiles, cancellationToken, out var nativeLibraryPath)) continue; @@ -324,7 +324,7 @@ void ProcessSidecar (ITaskItem r, string resources, List native_frame t.ItemSpec = GetActualLibrary (frameworkPath); t.SetMetadata ("Kind", "Framework"); t.SetMetadata ("PublishFolderType", "AppleFramework"); - t.SetMetadata ("RelativePath", Path.Combine (FrameworksDirectory, Path.GetFileName (Path.GetDirectoryName (t.ItemSpec)))); + t.SetMetadata ("RelativePath", Path.Combine (FrameworksDirectory, Path.GetFileName (Path.GetDirectoryName (t.ItemSpec)!))); } else if (name.EndsWith (".dylib", StringComparison.Ordinal)) { // macOS string? dylibPath; @@ -387,7 +387,7 @@ public static bool TryResolveXCFramework (XamarinTask task, string targetFramewo resourcePath = path; xcframework = Path.GetFileNameWithoutExtension (path); // Remove the .zip extension } else { - resourcePath = Path.GetDirectoryName (path); + resourcePath = Path.GetDirectoryName (path)!; xcframework = Path.GetFileName (path); } return TryResolveXCFramework (task, targetFrameworkMoniker, isSimulator, architectures, resourcePath, xcframework, intermediateDecompressionDir, createdFiles, cancellationToken, out nativeLibraryPath); @@ -434,7 +434,7 @@ public static bool TryResolveXCFramework (XamarinTask task, string targetFramewo return true; } - var zipResource = Path.Combine (xcframework, Path.GetDirectoryName (nativeLibraryRelativePath)); + var zipResource = Path.Combine (xcframework, Path.GetDirectoryName (nativeLibraryRelativePath)!); if (!CompressionHelper.TryDecompress (task, resourcePath, zipResource, intermediateDecompressionDir, createdFiles, cancellationToken, out var decompressedPath)) return false; @@ -561,7 +561,7 @@ public IEnumerable GetAdditionalItemsToBeCopied () var rv = new List (); rv.AddRange (CreateItemsForAllFilesRecursively (NativeReferences)); foreach (var reference in References) { - var resourcesPackage = Path.Combine (Path.GetDirectoryName (reference.ItemSpec), Path.GetFileNameWithoutExtension (reference.ItemSpec)) + ".resources"; + var resourcesPackage = Path.Combine (Path.GetDirectoryName (reference.ItemSpec)!, Path.GetFileNameWithoutExtension (reference.ItemSpec)) + ".resources"; if (Directory.Exists (resourcesPackage)) { var resources = CreateItemsForAllFilesRecursively (new string [] { resourcesPackage }); rv.AddRange (resources); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/ResolveUniversalTypeIdentifiers.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/ResolveUniversalTypeIdentifiers.cs index 31afa9916b51..2d51788f4545 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/ResolveUniversalTypeIdentifiers.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/ResolveUniversalTypeIdentifiers.cs @@ -37,7 +37,7 @@ public override bool Execute () var contentFiles = ImageAssets .Where (asset => Path.GetFileName (asset.ItemSpec) == "Contents.json" && - Path.GetDirectoryName (asset.ItemSpec).EndsWith (".dataset")) + Path.GetDirectoryName (asset.ItemSpec)!.EndsWith (".dataset")) .Select (x => x.ItemSpec); foreach (var filePath in contentFiles) { @@ -55,9 +55,10 @@ public override bool Execute () } var dataItemsToComplete = dataset - .DataItems - .Where (item => string.IsNullOrEmpty (item.UniversalTypeIdentifier) && - !string.IsNullOrEmpty (item.Filename)).ToList (); + ?.DataItems + ?.Where (item => string.IsNullOrEmpty (item.UniversalTypeIdentifier) && + !string.IsNullOrEmpty (item.Filename)).ToList () + ?? []; foreach (var data in dataItemsToComplete) { var file = ImageAssets.FirstOrDefault (x => Path.GetFileName (x.ItemSpec) == data.Filename); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/ScnTool.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/ScnTool.cs index 5f8e9617c1a8..e8c697edda2a 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/ScnTool.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/ScnTool.cs @@ -81,7 +81,7 @@ public override bool Execute () var args = GenerateCommandLineCommands (inputScene, outputScene); listOfArguments.Add (new (args, asset)); - Directory.CreateDirectory (Path.GetDirectoryName (outputScene)); + Directory.CreateDirectory (Path.GetDirectoryName (outputScene)!); var bundleResource = new TaskItem (outputScene); asset.CopyMetadataTo (bundleResource); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/SmartCopy.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/SmartCopy.cs index b2b65f4b14e2..d7a2738e80ff 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/SmartCopy.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/SmartCopy.cs @@ -59,7 +59,7 @@ void EnsureDirectoryExists (string path) void CopyFile (string source, string target, string targetItemSpec) { - var dirName = Path.GetDirectoryName (target); + var dirName = Path.GetDirectoryName (target)!; EnsureDirectoryExists (dirName); @@ -99,7 +99,7 @@ public override bool Execute () for (int i = 0; i < SourceFiles.Length; i++) { var target = DestinationFiles [i].GetMetadata ("FullPath"); var source = SourceFiles [i].GetMetadata ("FullPath"); - var targetDir = Path.GetDirectoryName (target); + var targetDir = Path.GetDirectoryName (target)!; EnsureDirectoryExists (targetDir); @@ -170,10 +170,10 @@ struct Stat { public uint st_uid; public uint st_gid; public uint st_rdev; - public timespec st_atimespec; - public timespec st_mtimespec; - public timespec st_ctimespec; - public timespec st_birthtimespec; + public Timespec st_atimespec; + public Timespec st_mtimespec; + public Timespec st_ctimespec; + public Timespec st_birthtimespec; public ulong st_size; public ulong st_blocks; public uint st_blksize; @@ -184,7 +184,7 @@ struct Stat { public ulong st_qspare_2; } - struct timespec { + struct Timespec { public IntPtr tv_sec; public IntPtr tv_nsec; } diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/TaskItemFixer.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/TaskItemFixer.cs index 1fd422b25065..2eb9ba3c07d3 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/TaskItemFixer.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/TaskItemFixer.cs @@ -12,7 +12,7 @@ public static void FixItemSpecs (TaskLoggingHelper log, Func var targetPath = Path.Combine (itemPathFactory (item), Path.GetFileName (item.ItemSpec)); if (!Directory.Exists (Path.GetDirectoryName (targetPath))) - Directory.CreateDirectory (Path.GetDirectoryName (targetPath)); + Directory.CreateDirectory (Path.GetDirectoryName (targetPath)!); // HACK: If the target path is a network directory, GetLastWriteTimeUtc returns some a difference of some milliseconds // for the same file. So we just use Year/Month/Day/Hour/Minute/Second to decide if we should copy the item to the target location. diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/TextureAtlas.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/TextureAtlas.cs index 5316bf815b4d..b2240c760e42 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/TextureAtlas.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/TextureAtlas.cs @@ -31,7 +31,7 @@ protected override string ToolName { protected override void AppendCommandLineArguments (IDictionary environment, List args, ITaskItem input, ITaskItem output) { args.Add (input.GetMetadata ("FullPath")); - args.Add (Path.GetDirectoryName (output.GetMetadata ("FullPath"))); + args.Add (Path.GetDirectoryName (output.GetMetadata ("FullPath"))!); } protected override string GetBundleRelativeOutputPath (ITaskItem input) @@ -92,7 +92,7 @@ protected override IEnumerable EnumerateInputs () // group the atlas textures by their parent .atlas directories foreach (var item in atlasTextures) { var logicalName = item.GetMetadata ("LogicalName"); - var atlasName = Path.GetDirectoryName (logicalName); + var atlasName = Path.GetDirectoryName (logicalName)!; if (!atlases.TryGetValue (atlasName, out var atlas)) { var atlasItem = new TaskItem (atlasName); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/UnpackLibraryResources.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/UnpackLibraryResources.cs index d0081325f780..564ef4c6807d 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/UnpackLibraryResources.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/UnpackLibraryResources.cs @@ -198,7 +198,7 @@ public void WriteResourceTo (AssemblyResource resource, string path) if (peReader is null) throw new ObjectDisposedException ("this"); - Directory.CreateDirectory (Path.GetDirectoryName (path)); + Directory.CreateDirectory (Path.GetDirectoryName (path)!); var manifestResource = resource.ManifestResource; var resourceDirectory = peReader.GetSectionData (peReader.PEHeaders.CorHeader!.ResourcesDirectory.RelativeVirtualAddress); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/Unzip.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/Unzip.cs index 5a4c4afaf1d5..ef0fa1e51056 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/Unzip.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/Unzip.cs @@ -44,12 +44,13 @@ public class Unzip : XamarinTask, ITaskCallback { public override bool Execute () { if (ShouldExecuteRemotely ()) { - var rv = ExecuteRemotely (out var taskRunner); + if (ExecuteRemotely (out var taskRunner)) { + if (CopyToWindows) + CopyFilesToWindowsAsync (taskRunner, TouchedFiles).Wait (); + return true; + } - if (rv && CopyToWindows) - CopyFilesToWindowsAsync (taskRunner, TouchedFiles).Wait (); - - return rv; + return false; } return ExecuteLocally (); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/WriteAppManifest.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/WriteAppManifest.cs index 0a63679e95f4..6e56f518a1a4 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/WriteAppManifest.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/WriteAppManifest.cs @@ -47,7 +47,7 @@ public override bool Execute () // write the resulting app manifest var appBundleManifestPath = AppBundleManifest!.ItemSpec; - Directory.CreateDirectory (Path.GetDirectoryName (appBundleManifestPath)); + Directory.CreateDirectory (Path.GetDirectoryName (appBundleManifestPath)!); plist.Save (appBundleManifestPath, true, true); return !Log.HasLoggedErrors; diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/WriteItemsToFile.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/WriteItemsToFile.cs index e2988f41b671..196a4a292e2b 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/WriteItemsToFile.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/WriteItemsToFile.cs @@ -54,7 +54,7 @@ public static void Write (Task task, string? file, IEnumerable items, System.IO.File.Delete (file); if (!Directory.Exists (Path.GetDirectoryName (file))) - Directory.CreateDirectory (Path.GetDirectoryName (file)); + Directory.CreateDirectory (Path.GetDirectoryName (file)!); document.Save (file); } @@ -73,7 +73,7 @@ static IEnumerable CreateMetadataFromItem (ITaskItem item, bool includ return metadata.Keys .OfType () - .Select (key => new XElement (XmlNs + key.ToString (), metadata [key].ToString ())); + .Select (key => new XElement (XmlNs + (key.ToString () ?? ""), metadata [key]?.ToString ())); } return Enumerable.Empty (); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinBuildTask.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinBuildTask.cs index 44667abe3677..241b4ec4bdf7 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinBuildTask.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinBuildTask.cs @@ -69,7 +69,7 @@ protected string ComputeValueUsingTarget (string computeValueTarget, string targ void AddRestoreConfigFile (List arguments, string dotnetPath) { - var dotnetDir = Path.GetDirectoryName (dotnetPath); + var dotnetDir = Path.GetDirectoryName (dotnetPath)!; var configFile = Path.Combine (dotnetDir, "NuGet.config"); if (File.Exists (configFile)) @@ -78,7 +78,7 @@ void AddRestoreConfigFile (List arguments, string dotnetPath) async Threading.Task ExecuteRestoreAsync (string dotnetPath, string projectPath, string targetName, Dictionary environment) { - var projectDirectory = Path.GetDirectoryName (projectPath); + var projectDirectory = Path.GetDirectoryName (projectPath)!; var binlog = Path.Combine (projectDirectory, targetName + ".binlog"); var arguments = new List (); @@ -101,7 +101,7 @@ async Threading.Task ExecuteRestoreAsync (string dotnetPath, string projectPath, async Threading.Task ExecuteBuildAsync (string dotnetPath, string projectPath, string targetName, Dictionary environment) { - var projectDirectory = Path.GetDirectoryName (projectPath); + var projectDirectory = Path.GetDirectoryName (projectPath)!; var outputFile = Path.Combine (projectDirectory, "Output.txt"); var binlog = Path.Combine (projectDirectory, targetName + ".binlog"); var arguments = new List (); diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/XcodeCompilerToolTask.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/XcodeCompilerToolTask.cs index 1be61b08f5fd..5f1e203a57fd 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/XcodeCompilerToolTask.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/XcodeCompilerToolTask.cs @@ -282,7 +282,7 @@ protected void LogWarningsAndErrors (PDictionary plist, ITaskItem file) if (plist.TryGetValue (string.Format ("com.apple.{0}.document.notices", ToolName), out dictionary)) { foreach (var valuePair in dictionary) { array = valuePair.Value as PArray; - foreach (var item in array.OfType ()) { + foreach (var item in array?.OfType () ?? Array.Empty ()) { if (item.TryGetValue ("message", out message)) Log.LogMessage (MessageImportance.Low, "{0} notice : {1}", ToolName, message.Value); } @@ -292,7 +292,7 @@ protected void LogWarningsAndErrors (PDictionary plist, ITaskItem file) if (plist.TryGetValue (string.Format ("com.apple.{0}.document.warnings", ToolName), out dictionary)) { foreach (var valuePair in dictionary) { array = valuePair.Value as PArray; - foreach (var item in array.OfType ()) { + foreach (var item in array?.OfType () ?? Array.Empty ()) { if (item.TryGetValue ("message", out message)) Log.LogWarning (ToolName, null, null, file.ItemSpec, 0, 0, 0, 0, "{0}", message.Value); } @@ -302,7 +302,7 @@ protected void LogWarningsAndErrors (PDictionary plist, ITaskItem file) if (plist.TryGetValue (string.Format ("com.apple.{0}.document.errors", ToolName), out dictionary)) { foreach (var valuePair in dictionary) { array = valuePair.Value as PArray; - foreach (var item in array.OfType ()) { + foreach (var item in array?.OfType () ?? Array.Empty ()) { if (item.TryGetValue ("message", out message)) Log.LogError (ToolName, null, null, file.ItemSpec, 0, 0, 0, 0, "{0}", message.Value); } diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/XcodeTool.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/XcodeTool.cs index ee357deeaa0a..60ebacc7d2ba 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/XcodeTool.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/XcodeTool.cs @@ -132,7 +132,7 @@ public override bool Execute () output.SetMetadata ("LogicalName", relative); if (NeedsBuilding (input, output)) { - Directory.CreateDirectory (Path.GetDirectoryName (output.ItemSpec)); + Directory.CreateDirectory (Path.GetDirectoryName (output.ItemSpec)!); if (ExecuteTool (input, output) == -1) return false; diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/Zip.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/Zip.cs index 42c4b199a034..7deae8597012 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/Zip.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/Zip.cs @@ -39,13 +39,13 @@ string GetWorkingDirectory () public override bool Execute () { if (ShouldExecuteRemotely ()) { - var rv = ExecuteRemotely (out var taskRunner); - - // Copy the zipped file back to Windows. - if (rv) + // Execute the task remotely. // Copy the zipped file back to Windows. + if (ExecuteRemotely (out var taskRunner)) { taskRunner.GetFileAsync (this, OutputFile!.ItemSpec).Wait (); + return true; + } - return rv; + return false; } var zip = OutputFile!.GetMetadata ("FullPath"); diff --git a/msbuild/Xamarin.MacDev.Tasks/Xamarin.MacDev.Tasks.csproj b/msbuild/Xamarin.MacDev.Tasks/Xamarin.MacDev.Tasks.csproj index 87569da4f029..3309f9bf5430 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Xamarin.MacDev.Tasks.csproj +++ b/msbuild/Xamarin.MacDev.Tasks/Xamarin.MacDev.Tasks.csproj @@ -1,7 +1,7 @@ - netstandard2.0 + netstandard2.0;net$(BundledNETCoreAppTargetFrameworkVersion) false compile true diff --git a/msbuild/Xamarin.iOS.Tasks.Windows/Xamarin.iOS.Tasks.Windows.csproj b/msbuild/Xamarin.iOS.Tasks.Windows/Xamarin.iOS.Tasks.Windows.csproj index 3112a066817e..dccb118d4a4e 100644 --- a/msbuild/Xamarin.iOS.Tasks.Windows/Xamarin.iOS.Tasks.Windows.csproj +++ b/msbuild/Xamarin.iOS.Tasks.Windows/Xamarin.iOS.Tasks.Windows.csproj @@ -1,7 +1,7 @@ - netstandard2.0 + netstandard2.0;net$(BundledNETCoreAppTargetFrameworkVersion) false false compile diff --git a/tools/common/FileUtils.cs b/tools/common/FileUtils.cs index 52d3b03084e2..f8b3c617674f 100644 --- a/tools/common/FileUtils.cs +++ b/tools/common/FileUtils.cs @@ -66,7 +66,7 @@ public static bool UpdateFile (string targetFile, Action createOutput) // File is up-to-date return false; } else { - Directory.CreateDirectory (Path.GetDirectoryName (targetFile)); + Directory.CreateDirectory (Path.GetDirectoryName (targetFile)!); File.Copy (tmpFile, targetFile, true); return true; }