Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
roslyn: ["3.11", "4.0", "4.4"]
roslyn: ["3.11", "4.0", "4.4", "5.0"]
steps:
- name: 🛒 Check-out code
uses: actions/checkout@v4
Expand Down
1 change: 1 addition & 0 deletions AutoCtor.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
<Project Path="src/AutoCtor.Roslyn3.11/AutoCtor.Roslyn3.11.csproj" />
<Project Path="src/AutoCtor.Roslyn4.0/AutoCtor.Roslyn4.0.csproj" />
<Project Path="src/AutoCtor.Roslyn4.4/AutoCtor.Roslyn4.4.csproj" />
<Project Path="src/AutoCtor.Roslyn5.0/AutoCtor.Roslyn5.0.csproj" />
<Project Path="src/Shared/Shared.csproj" />
<Project Path="src/Tests/Tests.csproj" />
</Solution>
7 changes: 6 additions & 1 deletion src/AutoCtor.Attributes/AutoCtor.Attributes.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFrameworks>netstandard2.0;net8.0;net9.0;net10.0;net462</TargetFrameworks>
<RootNamespace>AutoCtor</RootNamespace>
<IsPackable>true</IsPackable>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Expand Down Expand Up @@ -29,6 +29,8 @@
PrivateAssets="All" ReferenceOutputAssembly="false" />
<ProjectReference Include="..\AutoCtor.Roslyn4.4\AutoCtor.Roslyn4.4.csproj"
PrivateAssets="All" ReferenceOutputAssembly="false" />
<ProjectReference Include="..\AutoCtor.Roslyn5.0\AutoCtor.Roslyn5.0.csproj"
PrivateAssets="All" ReferenceOutputAssembly="false" />
</ItemGroup>

<ItemGroup>
Expand All @@ -41,6 +43,9 @@
<None Include="$(ArtifactsPath)\bin\AutoCtor.Roslyn4.4\$(ArtifactsPivots)\AutoCtor.dll"
Pack="true" PackagePath="analyzers/dotnet/roslyn4.4/cs" Visible="false"/>

<None Include="$(ArtifactsPath)\bin\AutoCtor.Roslyn5.0\$(ArtifactsPivots)\AutoCtor.dll"
Pack="true" PackagePath="analyzers/dotnet/roslyn5.0/cs" Visible="false"/>

<None Include="$(ProjectDir)..\..\readme.nuget.md"
Pack="true" PackagePath="\readme.md" Visible="false" />
<None Include="$(ProjectDir)..\..\src\nugetfiles\AutoCtor.props"
Expand Down
12 changes: 12 additions & 0 deletions src/AutoCtor.Roslyn5.0/AttributeSourceGenerator.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Microsoft.CodeAnalysis;

namespace AutoCtor;

public sealed partial class AttributeSourceGenerator : IIncrementalGenerator
{
public void Initialize(IncrementalGeneratorInitializationContext context)
{
context.RegisterPostInitializationOutput(static c =>
c.AddSource(Emitter.HintName, Emitter.GenerateSource()));
}
}
36 changes: 36 additions & 0 deletions src/AutoCtor.Roslyn5.0/AutoConstructSourceGenerator.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using Microsoft.CodeAnalysis;

namespace AutoCtor;

public sealed partial class AutoConstructSourceGenerator : IIncrementalGenerator
{
public void Initialize(IncrementalGeneratorInitializationContext context)
{
var properties = context.AnalyzerConfigOptionsProvider
.Select(static (p, ct) =>
{
return p.GlobalOptions.TryGetValue("build_property.AutoCtorGuards", out var value)
&& (value.Equals("true", StringComparison.OrdinalIgnoreCase)
|| value.Equals("enable", StringComparison.OrdinalIgnoreCase));
})
.WithTrackingName(TrackingNames.BuildProperties);

var types = context.SyntaxProvider.ForAttributeWithMetadataName(
AttributeNames.AutoConstruct,
GeneratorUtilities.IsTypeDeclarationWithAttributes,
static (c, ct) => TypeModel.Create((INamedTypeSymbol)c.TargetSymbol))
.WithTrackingName(TrackingNames.TypeModels)
.Collect();

var postCtorMethods = context.SyntaxProvider.ForAttributeWithMetadataName(
AttributeNames.AutoPostConstruct,
GeneratorUtilities.IsMethodDeclarationWithAttributes,
static (c, ct) => PostCtorModel.Create((IMethodSymbol)c.TargetSymbol))
.WithTrackingName(TrackingNames.PostCtorMethods)
.Collect();

context.RegisterSourceOutput(
types.Combine(postCtorMethods).Combine(properties),
Emitter.GenerateSource);
}
}
15 changes: 15 additions & 0 deletions src/AutoCtor.Roslyn5.0/AutoCtor.Roslyn5.0.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<DefineConstants>$(DefineConstants);ROSLYN_5;ROSLYN_5_0</DefineConstants>
</PropertyGroup>

<Import Project="../Common.props" />

<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" VersionOverride="5.0.0" PrivateAssets="all" />
</ItemGroup>

</Project>
8 changes: 4 additions & 4 deletions src/Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
<ItemGroup>
<PackageVersion Include="MarkdownSnippets.MsBuild" Version="28.0.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.11.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.14.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="5.0.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.SourceGenerators.Testing" Version="1.1.3" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.14.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.10" />
<PackageVersion Include="Microsoft.NETCore.App.Ref" Version="9.0.10" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="5.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.2" />
<PackageVersion Include="Microsoft.NETCore.App.Ref" Version="10.0.2" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="10.0.102" />
<PackageVersion Include="TUnit" Version="1.13.11" />
Expand Down
2 changes: 1 addition & 1 deletion src/Shared/AutoConstructSourceGenerator/Emitter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

#if ROSLYN_3
using EmitterContext = Microsoft.CodeAnalysis.GeneratorExecutionContext;
#elif ROSLYN_4
#elif ROSLYN_4 || ROSLYN_5
using EmitterContext = Microsoft.CodeAnalysis.SourceProductionContext;
#endif

Expand Down
2 changes: 1 addition & 1 deletion src/Shared/Helpers/Extensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

#if ROSLYN_3
using EmitterContext = Microsoft.CodeAnalysis.GeneratorExecutionContext;
#elif ROSLYN_4
#elif ROSLYN_4 || ROSLYN_5
using EmitterContext = Microsoft.CodeAnalysis.SourceProductionContext;
#endif

Expand Down
2 changes: 1 addition & 1 deletion src/Shared/Helpers/GeneratorUtilities.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

#if ROSLYN_3
using EmitterContext = Microsoft.CodeAnalysis.GeneratorExecutionContext;
#elif ROSLYN_4
#elif ROSLYN_4 || ROSLYN_5
using EmitterContext = Microsoft.CodeAnalysis.SourceProductionContext;
#endif

Expand Down
2 changes: 1 addition & 1 deletion src/Shared/Models/ParameterList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

#if ROSLYN_3
using EmitterContext = Microsoft.CodeAnalysis.GeneratorExecutionContext;
#elif ROSLYN_4
#elif ROSLYN_4 || ROSLYN_5
using EmitterContext = Microsoft.CodeAnalysis.SourceProductionContext;
#endif

Expand Down
2 changes: 1 addition & 1 deletion src/Shared/Models/TypeModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ private static bool IsValidProperty(IPropertySymbol property)

// Not required and not init properties
if (!(property.IsReadOnly ||
#if ROSLYN_4_4
#if ROSLYN_4_4 || ROSLYN_5
property.IsRequired ||
#endif
propertySyntax.AccessorList?.Accessors
Expand Down
6 changes: 3 additions & 3 deletions src/Tests/ExampleTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
using Microsoft.CodeAnalysis;
using static ExampleTestsHelper;

#if ROSLYN_4_4
#if ROSLYN_4_4 || ROSLYN_5
using Microsoft.CodeAnalysis.CSharp;
#endif

Expand Down Expand Up @@ -54,7 +54,7 @@ await Assert.That(outputCompilation.GetDiagnostics(TestHelper.CancellationToken)
.ConfigureAwait(false);
}

#if ROSLYN_4_4
#if ROSLYN_4_4 || ROSLYN_5
[Test]
[CombinedDataSources]
public async Task EnsureRunsAreCachedCorrectly(
Expand Down Expand Up @@ -126,7 +126,7 @@ public static IEnumerable<Func<CodeFileTheoryData>> GetExamples()
};
}

#if ROSLYN_4_4
#if ROSLYN_4_4 || ROSLYN_5
foreach (var readmeExample in GetExamplesFiles("ReadmeExamples"))
{
yield return () => new CodeFileTheoryData(readmeExample) with
Expand Down
2 changes: 1 addition & 1 deletion src/Tests/LangExamples/PropertiesTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ public partial class PropertiesTest
protected string ProtectedProperty { get; }
public string InitProperty { get; init; }

#if ROSLYN_4_4
#if ROSLYN_4_4 || ROSLYN_5
public required string RequiredProperty { get; set; }
#endif

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//HintName: PropertiesTest.g.cs
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by https://github.com/distantcam/AutoCtor
// </auto-generated>
//------------------------------------------------------------------------------

partial class PropertiesTest
{
[global::System.Runtime.CompilerServices.CompilerGenerated]
[global::System.CodeDom.Compiler.GeneratedCode("AutoCtor", "0.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCode]
[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage(Justification = "Generated code.")]
public PropertiesTest(
string getProperty,
string protectedProperty,
string initProperty,
string requiredProperty
)
{
this.GetProperty = getProperty;
this.ProtectedProperty = protectedProperty;
this.InitProperty = initProperty;
this.RequiredProperty = requiredProperty;
}
}
7 changes: 6 additions & 1 deletion src/Tests/Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
<PropertyGroup>
<!--<GeneratorVersion>3.11</GeneratorVersion>-->
<!--<GeneratorVersion>4.0</GeneratorVersion>-->
<GeneratorVersion>4.4</GeneratorVersion>
<!--<GeneratorVersion>4.4</GeneratorVersion>-->
<GeneratorVersion>5.0</GeneratorVersion>
</PropertyGroup>

<PropertyGroup>
Expand All @@ -31,6 +32,10 @@
<DefineConstants>$(DefineConstants);ROSLYN_4;ROSLYN_4_4</DefineConstants>
</PropertyGroup>

<PropertyGroup Condition=" '$(GeneratorVersion)' == '5.0' ">
<DefineConstants>$(DefineConstants);ROSLYN_5;ROSLYN_5_0</DefineConstants>
</PropertyGroup>

<ItemGroup>
<Compile Remove="Examples\*.cs" />
<Compile Remove="GuardExamples\*.cs" />
Expand Down
15 changes: 12 additions & 3 deletions src/Tests/Utilities/ExampleTestsHelper.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
using System.Collections.Immutable;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using TUnit.Core.Interfaces;

#if ROSLYN_4 || ROSLYN_5
using System.Collections.Immutable;
#endif

internal static class ExampleTestsHelper
{
public static readonly IEnumerable<string> PreprocessorSymbols = [
Expand All @@ -20,6 +23,12 @@ internal static class ExampleTestsHelper
#endif
#if ROSLYN_4_4
"ROSLYN_4_4",
#endif
#if ROSLYN_5
"ROSLYN_5",
#endif
#if ROSLYN_5_0
"ROSLYN_5_0",
#endif
];

Expand Down Expand Up @@ -75,7 +84,7 @@ public CompilationBuilder Create(CodeFileTheoryData theoryData)
}
}

#if ROSLYN_4
#if ROSLYN_4 || ROSLYN_5
public static async Task AssertRunsEqual(
GeneratorDriverRunResult runResult1,
GeneratorDriverRunResult runResult2,
Expand Down
8 changes: 8 additions & 0 deletions src/Tests/Utilities/GeneratorDriverBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,14 @@ public GeneratorDriver Build(CSharpParseOptions parseOptions)
disabledOutputs: IncrementalGeneratorOutputKind.None,
trackIncrementalGeneratorSteps: true
));
#elif ROSLYN_5_0
return CSharpGeneratorDriver.Create(_generators,
parseOptions: parseOptions,
optionsProvider: new TestAnalyzerConfigOptionsProvider(_analyzerOptions),
driverOptions: new GeneratorDriverOptions(
disabledOutputs: IncrementalGeneratorOutputKind.None,
trackIncrementalGeneratorSteps: true
));
#endif
}

Expand Down