Skip to content

[fix-finder] Enable #nullable enable in SolutionBuilder.cs #11457

@github-actions

Description

@github-actions

Problem

SolutionBuilder.cs in the test infrastructure does not opt into nullable reference types, leaving potential null-reference issues undetected at compile time. The owning project (Xamarin.ProjectTools.csproj) already sets <Nullable>annotations</Nullable> and targets $(DotNetStableTargetFramework) (net10.0+), so enabling nullable at the file level is straightforward.

Location

  • File: src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/SolutionBuilder.cs

Current Code

public string SolutionPath { get; set; }
public string SolutionName { get; set; }

SolutionPath is never set in the constructor — it is always assigned via object initializer by callers. Without nullable annotations, the compiler cannot warn about uninitialized usage.

Suggested Fix

  1. Add #nullable enable as the very first line of the file (no preceding blank lines).
  2. Make SolutionPath nullable since it is not set in the constructor:
    public string? SolutionPath { get; set; }
  3. Keep SolutionName non-nullable (it is set in the constructor) and give it a default:
    public string SolutionName { get; set; } = "";
    (The constructor already assigns it, but the default satisfies the compiler for the window before the constructor body runs.)
  4. In Dispose, guard the Directory.Delete call since SolutionPath is now nullable:
    if (!string.IsNullOrEmpty (SolutionPath))
        Directory.Delete (SolutionPath, recursive: true);

Do NOT use the ! (null-forgiving) operator anywhere. Use explicit null checks or ArgumentNullException.ThrowIfNull where needed (net10.0+ TFM allows ThrowIfNull).

Guidelines

  • Follow the repo's nullable conventions (see .github/copilot-instructions.md)
  • Use x.IsNullOrEmpty () extension method instead of string.IsNullOrEmpty (x) where applicable
  • Use tabs for indentation (Mono style)
  • Space before parentheses: Method (), array [0]
  • Preserve existing formatting and comments

Acceptance Criteria

  • #nullable enable added as the first line of the file
  • SolutionPath is string?; SolutionName has a default value = ""
  • No ! (null-forgiving operator) used anywhere in the file
  • All existing tests continue to compile and pass
  • No new warnings introduced

Fix-finder metadata

  • Script: 01-nullable-reference-types
  • Score: 27/30 (actionability: 9, safety: 9, scope: 9)

Generated by Nightly Fix Finder for issue #11451 · ● 18.4M ·

  • expires on May 29, 2026, 4:43 PM UTC

Metadata

Metadata

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions