RSCG – ShadowWriterBuilder

RSCG – ShadowWriterBuilder
 
 

name ShadowWriterBuilder
nuget https://www.nuget.org/packages/ShadowWriter/
link https://github.com/StefanStolz/ShadowWriter
author Stefan Stolz

Generating null objects for testing

 

This is how you can use ShadowWriterBuilder .

The code that you start with is


<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
  </PropertyGroup>

	  <PropertyGroup>
        <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
        <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
    </PropertyGroup>

	  <ItemGroup>
	    <PackageReference Include="ShadowWriter" Version="0.9.5">
	      <PrivateAssets>all</PrivateAssets>
	      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
	    </PackageReference>
	  </ItemGroup>

	  
</Project>


The code that you will use is


using Builder;

var pOld = new Person("Andrei", "G", "Ignat");
var build = new Person.Builder();
build.FirstName = pOld.FirstName;
build.MiddleName = "";
build.LastName = (pOld.LastName)    ;

var pNew = build.Build();
System.Console.WriteLine(pNew.FullName());
System.Console.WriteLine(pOld.FullName());



namespace Builder;

[ShadowWriter.Builder]
public partial record Person(string FirstName, string? MiddleName, string LastName)
{
    public string FullName()
    {
        return FirstName + " " + MiddleName + " "+LastName;
    }
    
}


 

The code that is generated is

// <auto-generated/>

using System;
using System.CodeDom.Compiler;
using System.Runtime.CompilerServices;

namespace ShadowWriter
{
    [CompilerGenerated]
    [GeneratedCode("ShadowWriter", "0.9.5.0")]
    [System.AttributeUsage(AttributeTargets.Class)]
    internal sealed class BuilderAttribute : System.Attribute
    {

    }
}
using System;
using System.Threading.Tasks;
using System.CodeDom.Compiler;
using System.Runtime.CompilerServices;

#nullable disable

namespace Builder;

[CompilerGenerated]
[GeneratedCode("ShadowWriter", "0.9.5.0")]
public partial record Person
{
    public sealed class Builder
{
      // Parameter: FirstName: string
  public string FirstName { get; set; } = "";
  // Parameter: MiddleName: string?
  public string? MiddleName { get; set; } = "";
  // Parameter: LastName: string
  public string LastName { get; set; } = "";
  public Person Build()
  {
    return new(this.FirstName, this.MiddleName, this.LastName    );
  }

}
}

Code and pdf at

https://ignatandrei.github.io/RSCG_Examples/v2/docs/ShadowWriterBuilder


Posted

in

, ,

by

Tags: